ich ein verwirrendes Problem auf Hibernate Assoication Mapping haben, sind hier das Code-Snippet:Wie ein verzögertes Laden schaffen ermöglicht eine Eins-zu-eins-Beziehungen mit gemeinsamen Primärschlüssel Weg
@Entity
public class Body {
@Id
public Long getId() { return id; }
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
public Heart getHeart() {
return heart;
}
...
}
@Entity
public class Heart {
@Id
public Long getId() { ...}
}
Wie ich kennen gelernt habe, wenn ich ein träges Laden das Herz Einheit wollen, während ein Körper laden, muss ich hinzufügen, beide holen = FetchType.LAZY und optional = false zu der Anmerkung, es sieht aus wie:
@OneToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY, optional=false)
@PrimaryKeyJoinColumn
public Heart getHeart() {
return heart;
}
die optionalen = false bedeutet, dass, wenn Eine neue Körpereinheit wird beibehalten, die zugehörige Entität (hier ist das Herz) muss ebenfalls auf body festgelegt werden, z. B. b ody.setHeart (heart), aber heart muss auch seinen member body setzen: heart.setBody(), body ist jedoch noch nicht persistent, so dass der Wert der Primärschlüsselspalte null ist. Wenn der folgende Code ausgeführt wird, wird die Ausnahme verworfen.
Body body= new Body();
Heart heart = new Heart();
heart.setBody(body);
body.setHeart(heart);
bodyDao.save(body);
die Ausnahme ist:
Caused by: org.hibernate.id.IdentifierGenerationException: null id generated for:class org.fbb.domain.Heart
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:103)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:97)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:648)
at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:640)
at org.hibernate.engine.spi.CascadingActions$5.cascade(CascadingActions.java:218)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:398)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:162)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:111)
, wie dieses Problem zu lösen? Dank
@ Zulfi in Ihrem Fall verbunden ist, – ylei
@ylei ... hab dich nicht verstanden – Zulfi