我有兩個對象Mat和MatImage,父母和孩子resp。 MatImage的主鍵是Mat的id,它們通過一對一的關係進行連接。@PrimaryKeyJoinColumn與Bidirectional @OneToOne關係
如果我正確理解雙向關係,那麼如果我執行類似matImage.setMat(mat)的操作,子對象將知道父對象。我認爲在這一點上主要關鍵將被填補,但事實並非如此。我知道這是因爲當sql嘗試以#0作爲matId插入MatImage時拋出異常。
另一個問題是n + 1問題。我想懶惰地加載子對象,因爲不是所有的墊都有matimage。我可以嘗試將@OneToOne更改爲@ManyToOne,但不知道如何雙向完成。任何幫助,將不勝感激。謝謝。
這裏是實體:
// Mat
@Entity
@Table(name="mat")
public class Mat implements Serializable {
@Id
@GeneratedValue(generator="SeqMat")
@SequenceGenerator(name="SeqMat", sequenceName="seq_mat_id")
int id
@OneToOne(mappedBy="mat", optional=true, fetch=FetchType.LAZY)
@PrimaryKeyJoinColumn(name="id", referencedColumnName="matId")
@Cascade([ALL, DELETE_ORPHAN])
MatImage matImage
int matTemplateId
int number
...
}
// MatImage
@Entity
@Table(name="matimage")
public class MatImage implements Serializable {
@Id
int matId
@OneToOne(optional=true, fetch=FetchType.LAZY)
@JoinColumn(name="matId", referencedColumnName="id")
Mat mat
@Column(name="img_eventid")
int eventId
...
}
你使用Oracle ???你說過:當SQL嘗試以#0作爲matId插入MatImage時,SQL會引發異常。好的,但你能展示如何保存一個MatImage對象? – 2010-01-04 21:09:32
實際上你的問題是什麼?清楚說明。 – Bozho 2010-01-05 04:50:58
Mat設置爲MatImage之前保存了Mat嗎? – EJB 2010-01-05 09:36:07