マージで@Id変数が割り当てられないJPA2の特定のケースはありますか?それでも、例外を発生させずにエンティティの新しいインスタンスを返しますか?
私がこの階層を持っているとしましょう:
@MappedSuperclass
abstract class Bar {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
...
}
@Entity
@Table(name = "BAR_1S")
@Access(AccessType.PROPERTY)
class Bar1 extends Bar {
...
}
@Entity
@Table(name = "BAR_2S")
@Access(AccessType.PROPERTY)
class Bar2 extends Bar {
...
}
まだ見つかっていない理由により、Bar1のインスタンスはmerge()の後にIDを取得しますが、Bar2のインスタンスは取得しません。少なくともそれはそれがどのように見えるかです。私はさまざまなアプローチを試みてきました。
Hibernate(4.1.4.Final)は、その特定のクラスのインスタンスにIDを割り当てたくないようです。:-)
私が持っている質問:
誰かがこのようなものを持ったことがありますか?
誰かがHibernateのどこにIDが設定されているか教えてもらえますか?したがって、コードのその部分をデバッグして、割り当てをスキップする理由を見つけることができます。IntelliJは、エンティティのフィールドの変更を中断していないようです。
編集-環境構成
- OS:LMDE amd64
- データベース:MySQL(5.1.61-2)ConnectJ(5.1.17)
- JVM:1.7.0_04
- Hibernate:4.1.4。最終
- 春:3.1.1
編集-コード
すべてのエンティティクラスは、Barの(間接的な)直接サブクラスです。@Idが定義されている場所は1つだけです。そして、IDを取得するBar2のいくつかの同一のケースがあります。しかし、具体的にはBar2はそうではありません。
最終的なBar1bar= new Bar1(); JpaTemplate.merge(bar); <-IDを取得します
最終的なBar2bar= new Bar2(); JpaTemplate.merge(bar); <-IDがありません
アプリケーションはSpringのJpaTemplateを使用してエンティティをマージしています。これは、その特定のクラスを除くすべてのクラスで問題なく実行されます。
したがって、IDを割り当てているHibernateクラスを見つけることができれば、私が見落としていたばかげた詳細を見つけることができるでしょう。:-)