我正在使用 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 来查看数据是否存在。
还要确保您不会通过插入/更新具有空集合的对象来破坏共享缓存。您必须维持双向关系的双方。您可以尝试禁用缓存,看看这是否是您正在做的事情。
关于java - 集合未充满 OneToMany 关系 - EclipseLink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15570246/