5

生成された値を使用する2つのエンティティクラスがあります

@Entity
@SequenceGenerator(allocationSize = 1, initialValue = 1000, name = "idgen")
public class Ent1 {
    @Id
    @GeneratedValue(generator = "idgen")
    private Long id;

    ...
}

@Entity
public class Ent2 {
    @Id
    @GeneratedValue(generator = "idgen")
    private Long id;

    ...
}

問題は、行を入れない場合です

@SequenceGenerator(allocationSize = 1, initialValue = 1000, name = "idgen")

両方のエンティティでエラーが発生します:

Caused by: org.hibernate.AnnotationException: Unknown Id.generator: idgen

しかし、JPA 仕様では、@SequenceGenerator のスコープは「グローバル」であり、エンティティ間で再利用できると述べています。

私は何が欠けていますか?

4

4 に答える 4

0

仕様の次の部分は、私には確かに奇妙です。

ジェネレーター名のスコープは、永続化ユニットに対してグローバルです (すべてのジェネレーター タイプにわたって)。

私はあなたのように解釈します: ジェネレーターは 1 つの場所で指定でき、同じ永続化ユニットのどこでも再利用できます。現在の Hibernate の実装では、この文が考慮されていないようです。

この文の解釈に役立つ JPA/Hibernate 仕様のスペシャリストはいますか?

于 2014-09-19T09:45:32.317 に答える
0

過去に、Hibernate はエンティティごとにシーケンスをスコープし、JPA はこれがグローバルであるべきだと言ったので、両方を許可するために、これを制御する設定が導入されました。hibernate.jpa.compliance.global_id_generatorsに設定すると、グローバル スコープを有効にできますtrue詳細については、 https ://docs.jboss.org/hibernate/orm/5.5/userguide/html_single/Hibernate_User_Guide.html#configurations-jpa-compliance のドキュメントも参照してください。

于 2021-06-24T07:17:53.167 に答える
0

コピー

@SequenceGenerator(allocationSize = 1, initialValue = 1000, name = "idgen")

詳細については、 https: //www.logicbig.com/tutorials/java-ee-tutorial/jpa/seq-generator.html を
参照してください。

于 2020-02-20T01:57:31.893 に答える