0

私は、Glassfish 3.1、EJB 3.1、EclipseLink 2.4.2、SQL Server 2008 R2 のテクノロジ スタックを持つ JAVAEE エンタープライズ アプリケーションに取り組んでいます。EJB モジュールには、SequenceGenerator を使用するエンティティがいくつかあり、TableGenerator を使用するエンティティがいくつかあります。

SequenceGenerator は正常に動作していますが、TableGenerator はそうではありません。EclipseLink のロギングを ' FINEST 'に設定して server.log を確認しようとしましたが、ID の次の値を取得するためにログに記録されたクエリはありません。TableGenerator を使用する EJB エンティティは次のとおりです。

@Entity
@Table(name = "TEST")
@TableGenerator(name = "test_gen", table = "ID_GENERATOR", pkColumnName = "ID_NAME", pkColumnValue = "TEST", valueColumnName = "ID_VAL", allocationSize = 50, initialValue = 1)
public class Test extends SuperClass implements Interface1, Interface2, Interface3, Interface4, Interface5, Serializable {
    private static final long serialVersionUID = 5084413459400887388L;

    /** The id of the entry.
     */
    protected long id = 0;

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "test_gen")
    @Column(name = "NWTID", nullable = false, updatable = false)
    @Override
    public long getId() {
        return id;
    }

    .....

}

: テーブル 'ID_GENERATOR' は、一意のジェネレーター名を持つ、TableGenerator 注釈を持つすべてのエンティティによって使用されます。

「 FINEST 」設定でログを確認した後、他の多くの方法を試しましたが、「TableGenerator」を機能させることができませんでした。その後、EclipseLink の (2.4.2) ソースをダウンロードし、デプロイ時とアプリケーションの実行時に「シーケンス」メカニズムをデバッグしました。展開中に、シーケンス「TEST」が初期化されていることがわかりましたが、実行時に ID が生成されていません。

ところで、私のpersistence.xmlにはいくつかのデータソースがあり、EclipseLinkの次のプロパティがあります:

<persistence-unit name="TestCtx" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>TESTDS</jta-data-source>
        <properties>
            <property name="eclipselink.target-database"  value="SQLServer"/>
            <property name="eclipselink.query-results-cache" value="false"/>
            <property name="eclipselink.cache.shared.default" value="false"/>            
            <property name="eclipselink.weaving" value="static"/>
            <property name="eclipselink.id-validation" value="NULL"/>
            <property name="javax.persistence.validation.mode" value="NONE"/>
            <property name="eclipselink.ddl-generation" value="create-or-extend-tables"/>
            <property name="eclipselink.logging.thread" value="false"/>
            <property name="eclipselink.logging.session" value="false"/>
            <property name="eclipselink.logging.timestamp" value="false"/>
            <property name="eclipselink.logging.exceptions" value="false"/>
        </properties>
    </persistence-unit>

ここで何が起こっているのか、何か手がかりはありますか?

4

1 に答える 1