java - 集合未充满 OneToMany 关系 - EclipseLink

标签 java jpa eclipselink

我正在使用 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/

相关文章:

java - Maven Jdepend 报告不包含任何数据

java - 从java中的txt文件中读取分隔行

hibernate - 我如何让许多 @ManyToMany 关系起作用?

java - 使用 @IdClass 的带有额外列的 JPA 多对多在 springTestContextPreparation Hibernate AnnotationException "has no persistent id property"中失败

java - JPA 持久保存与现有实体有关系的新实体

java - 我可以组合 SWT GridLayout 和 FillLayout 吗

java - 在Java中实例化集合的集合?

java - 如何使用 Web 服务和 EclipseLink 作为 JPA 提供程序更新数据库?

java - 如何将命名空间感知设置为 false?

lucene - 在 Lucene 中索引 POJO