I以下の状況を有する:すなわちHibernate 3で派生IDをどのようにマップするのですか?
@Entity
class A{
@Id
@SequenceGenerator(name = "SEQ_AID", sequenceName = "SEQ_AID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_AID")
private Long aId;
@OneToOne(fetch=FecthType.LAZY,optional=false,cascade=CascadeType.ALL)
private B b;
...
}
@Entity
class B{
@Id
private A a;
...
}
:そこAとB、Bとの間のOneToOne会合が弱いエンティティがされ、そのIDがクラスAから誘導され、私は「
既に@OneToOneの下に@PrimaryKeyJoinColumnを追加することでいくつかの解決策を試しましたが、これはarticleに言及しています。 "org.hibernate.id.IdentifierGenerationException:このクラスのIDはsave()を呼び出す前に手動で割り当てる必要があります:B"
このケースでは関連するかどうかわかりませんが、私は使用していますOracle 11g。
が更新
私は正しい方法でだと思います。
@Entity
class A{
@Id
@SequenceGenerator(name = "SEQ_AID", sequenceName = "SEQ_AID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_AID")
private Long aId;
@OneToOne(fetch=FecthType.LAZY,optional=false,cascade=CascadeType.ALL)
@PrimaryKeyJoinColumn(name="aId")
private B b;
...
}
@Entity
class B{
@Id
@OneToOne
@JoinColumn(name="aId)
private A a;
...
}
エラーは今異なるビットである:ここに私の問題の実際の状態であることがテーブルBに(代わりに、AIDの)列Aを検索しようとしている
java.sql.SQLException: ORA-00904: "B"."A": invalid identifier
はI列名がBAではなくB.AIDであることを指定する方法を知らない
あなたは休止3.5を使用する場合、これが役立つことがあります。http://stackoverflow.com/questions/ 4027623/how-do-i-cascade-save-a-one-to-one-bidirectional-relationship-on-primar – axtavt