0
我現在試圖用hibernate從mysql數據庫中檢索數據。但是,我遇到了org.hibernate.AnnotationException,它提醒我不能使用單個屬性。我的代碼如下,請看看。休眠多對一映射使用主要複合鍵中的一列
@Entity
@Table(name = "master")
public class Master implements Serializable {
@EmbeddedId
private MasterPK id;
@Column
private String description;
@Column
private String username;
@Column
private String emailaddress;
....
@OneToMany(mappedBy = "master")
@LazyCollection(LazyCollectionOption.FALSE)
private List<Child> childs;
....
// Getter and setter
}
@Entity
@Table(name = "child")
public class Child implements Serializable {
....
@Column
private String code;
@Column
private String isGolden;
@Column
private Date startServiceDate;
@Column
private Date endServiceDate;
@ManyToOne
@JoinColumn(name="id_a", referencedColumnName="id_a")
private Master master;
....
// Getter and setter
}
@Embeddable
public class MasterPK implements Serializable {
@Column(name="id_a")
private String idA;
@Column(name="id_b")
private String idB;
...
//Classes generated by JPA Tools e.g. getter, setter, comparator
}
我嘗試使用master.id_a和child.id_a到主表和子表的映射,而ID_A和ID_B是主表的主鍵。因此,休眠拋出異常,我無法啓動我的應用程序。但我仍然希望僅通過id_a映射兩個表,因爲子表沒有id_b。而設計是,主表中的每一行都可能映射到多個子表。我可以針對這種情況提出一些建議嗎?非常感謝!
感謝您的幫助。我更新了我的代碼。實際上,子表只是其中一個擴展表,用於存儲主表 –
中的額外詳細信息。主表和子表只共享FK id_a。主表使用id_a和id_b作爲主鍵(id_a也是唯一的,但需要將id_b作爲主鍵用於其他目的,表不能更改)。子表只有id_a列。 –
對不起,我對這個設計感到困惑,當'id_a'單獨是一個好的pk時,在主表中結合id_a和id_b作爲pk的目的是什麼?無論如何,你使用hibernate的問題是,子實體必須引用master的主鍵的所有列,而不僅僅是 'id_a'。 – gtosto