我正在使用EclipseLink将数据库(Oracle 11g)映射到JPA实体。我几乎将每个表都映射到JPA对象,但是我刚发现一个问题:
在\ Curve \实体中,我具有以下字段:
@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;
问题是,尽管查询两个表中都有有效数据,但当我查询\ Curve \实体时,详细信息始终为空。检查数据库我注意到\ CurveDetail \表中没有外键约束,所以我想知道“是否需要这些约束才能正确映射数据库?我没有尝试自己添加FK约束,因为不允许这样做(必须请DBA这样做,这需要一周的时间)。
提前致谢!
最佳答案
不需要外键。
检查通过启用日志记录生成的SQL(“ eclipselink.logging.level” =“ finest”)
尝试对相同的数据库执行相同的SQL,以查看数据是否存在。
还应通过插入/更新具有null集合的对象来确保不破坏共享缓存。您必须保持双向关系的双方。您可以尝试禁用缓存,看看这是否在做。
关于java - 集合未充满OneToMany关系-EclipseLink,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15570246/