集合没有填充OneToMany关系--EclipseLink

时间:2013-03-22 12:24:17

标签: java jpa eclipselink

我正在使用EclipseLink将数据库(Oracle 11g)映射到JPA实体。我几乎将每个表都映射到了JPA对象,但我刚发现了一个问题:

在\ Curve \ entity中,我有以下字段:

@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 \ entity中我有这个:

@ManyToOne
@JoinColumns({
    @JoinColumn(name = "COD_CURVE", referencedColumnName = "COD_CURVE"),
    @JoinColumn(name = "FEC_HISTORIC", referencedColumnName = "FEC_HISTORIC")
})
private Curve codCurve;

问题在于,当我查询\ Curve \ entity时,尽管两个表中都有有效数据,但细节始终为null。检查数据库我注意到\ CurveDetail \表中没有外键约束,所以我想知道是否需要这些约束来正确映射数据库?我没有尝试过自己添加FK约束,因为我不允许(必须要求DBA这样做,而且需要一周时间)。

提前致谢!

2 个答案:

答案 0 :(得分:1)

不需要外键。

检查启用日志记录生成的SQL(“eclipselink.logging.level”=“finest”)

尝试使用相同的数据库执行相同的SQL,以查看数据是否存在。

还要确保通过插入/更新具有null集合的对象来破坏共享缓存。你必须保持双向关系的双方。您可以尝试禁用缓存以查看这是否正在执行此操作。

答案 1 :(得分:0)

我知道有一个FK约束不是强制性的。一旦我遇到同样的问题(但它是Oracle 9i)并发现Entity类的名称应该与您要映射的表的名称相匹配,并且JPA SQL和Hibernate HQL都是区分大小写的,所以在写作时要小心@Column标签。