我正在使用EclipseLink將數據庫(Oracle 11g)映射到JPA實體。我幾乎每個表映射到JPA的對象,但我剛剛發現了一個問題:集合沒有填充OneToMany關係 - EclipseLink
在\曲線\實體,我有以下字段:
@Id
@Column(name = "COD_CURVE")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq.gen")
@SequenceGenerator(name = "seq.gen.curve", sequenceName = "SEQCURVE", allocationSize = 1)
private long codCurve;
@Id
@Column(name = "FEC_HISTORIC")
@Temporal(javax.persistence.TemporalType.DATE)
private Date fecHistoric;
@OneToMany(mappedBy="codCurve", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Collection<CurveDetail> detailsCollection;
在我有這個\ CurveDetail \實體:
@ManyToOne
@JoinColumns({
@JoinColumn(name = "COD_CURVE", referencedColumnName = "COD_CURVE"),
@JoinColumn(name = "FEC_HISTORIC", referencedColumnName = "FEC_HISTORIC")
})
private Curve codCurve;
的問題是,當我查詢\曲線\實體,總是在細節,都爲空儘管有兩個表中的有效數據。檢查數據庫我注意到\ CurveDetail \ table中沒有外鍵約束,所以我想知道這些約束是否需要正確映射數據庫?我沒有嘗試自己添加FK約束,因爲我不允許(必須要求DBA來完成),並且需要一週的時間。
在此先感謝!
當你設置關係,你是否設置雙方? manyToOne控制關係,因此需要將變化設置爲最小,以便在數據庫中保持更改,但兩者都應由應用程序維護。 – Chris 2013-03-22 12:44:42
@Chris雙方意味着什麼?我只是執行查詢,我不更新或插入數據。查詢\ SELECT o從曲線o \返回的所有曲線的\ CurveDetail \集合爲空,這就是問題 – CocheLee 2013-03-22 12:57:01
嘗試刷新,看看這是否是緩存被破壞的問題,因爲如果這個EclipseLink將放入一個空集合是從數據庫中構建的。您如何以及在哪裏訪問集合?如果在實體之外,請確保使用訪問器方法。 – Chris 2013-03-23 00:03:02