Ich habe folgende Situation:Wie man abgeleitete Identitäten in Hibernate 3 abbildet?
@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;
...
}
Mit anderen Worten: Es gibt einen Zusammenhang zwischen OneToOne A und B. B eine schwache Person ist, und seine Id aus der Klasse A.
I‘abgeleitet ist, Ich habe bereits einige Lösungen getestet, die @PrimaryKeyJoinColumn unter @OneToOne hinzufügen, wie dies article erwähnt. Aber ich habe diesen Fehler: "org.hibernate.id.IdentifierGenerationException: IDs für diese Klasse muss manuell vor dem Aufruf von save() zugewiesen werden: B"
Ich weiß nicht, ob es in diesem Fall relevant ist, aber ich verwende Oracle 11g.
AKTUALISIERT
Ich glaube, ich in der richtigen Art und Weise bin. Hier ist der Ist-Zustand meines Problems:
@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;
...
}
Der Fehler ist jetzt ein bisschen anders:
java.sql.SQLException: ORA-00904: "B"."A": invalid identifier
Es wird versucht, die Spalte A (statt AID) in der Tabelle B zu finden I Ich weiß nicht, wie ich angeben soll, dass der Spaltenname B.AID und nicht BA ist
Wenn Sie Hibernate 3.5, das helfen kann: http://stackoverflow.com/questions/ 4027623/how-do-i-richtig-Kaskaden-speichern-ein-zu-eins-bidirektionale Beziehung-auf-Primar – axtavt