我想要一個單向 3個java類的對象之間的一對一關係:Person to Heart和Person to Liver。我想讓這些物品共享相同的PK,即每個人都有相應的心臟和肝臟,其中person.person_id = heart.heart_id = liver.liver_id。我不想將3個表合併爲1,因爲每個表都有多個字段。這裏是我的代碼(主要是基於公認的答案爲this question):休眠一對一實體關聯與3個類別之間的共享PK
@Entity
public class Person {
public long personId;
private String name;
public Heart heart;
public Liver liver;
// other fields
@Id
@GeneratedValue
public long getPersonId() {return personId;}
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
public Heart getHeart() {return heart;}
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
public Liver getLiver() {return liver;}
// other getters and setters and constructors
}
@Entity
public class Heart {
private long heartId;
private int bpm;
private Person person;
// other fields
@Id
@GenericGenerator(
name = "generator",
strategy = "foreign",
parameters = @Parameter(name = "property", value = "person")
)
@GeneratedValue(generator = "generator")
public long getHeartId() {return heardId;}
@OneToOne(mappedBy="heart")
@PrimaryKeyJoinColumn
public Person getPerson() {return person;}
// other getters and setters and constructors
}
@Entity
public class Liver {
private long liverId;
private boolean healthy;
private Person person;
// other fields
// the rest uses the same hibernate annotation as Heart
}
我建立會話,並執行以下操作:
Person jack = new Person();
jack.setName("jack");
Heart heart = new Heart();
heart.setBpm(80);
Liver liver = new Liver();
liver.setHealthy(true);
然後,如果我連接起來,人物對象與它的器官,和保存它,我得到一個錯誤(注:我的時候我只用2類相同的行爲,例如人與心):
jack.setHeart(heart);
jack.setLiver(liver);
session.save(jack);
組織。 hibernate.id.IdentifierGenerationException:試圖從空一到一個屬性分配ID:人
但是它的工作原理,如果我設定的關係是雙向的:
jack.setHeart(heart);
heart.setPerson(jack);
jack.setLiver(liver);
liver.setPerson(jack);
session.save(jack);
但可以肯定這不應該是單向關係需要嗎?
乾杯
ps。奇怪的是,我注意到它的工作原理(將兩個對象保存到數據庫),當我只使用2個類時,例如人與心,我只是設置鏈接的其他方式:
heart.setPerson(jack);
session.save(heart);
我不知道爲什麼這工作(這似乎是合乎邏輯,我認爲人是父對象,因爲它會自動生成它自己的PK,和其他人使用,所以這就是你應該有設置),但無論如何,我無法弄清楚如何將這種工作方法適用於我的3級的情況...
我剛剛發現這個問題,我認爲這是對於同樣的情況,但使用了完全不同的方法(它使用@Embeddable和@Inheritance):http://stackoverflow.com/questions/ 904634。唯一的問題是,我接受的解決方案中沒有足夠的相關代碼來理解/實施它......任何人都可以提供幫助嗎? – jackocnr 2009-12-08 20:04:49