与执行时共享不一致的一对一关系

时间:2013-04-22 09:16:22

标签: mysql database jpa eclipselink one-to-one

我正在使用带有MySql的EclipseLink(JPA 2.0),我在模型中遇到了问题。 我有2个实体:Delincuente,PerfilFisico。他们分享了Delincuente的Pk。

DB工作正常但是当我插入Delincuente然后插入Perfil Fisico时,我试图显示Delincuente的PerfilFisico(使用Delincuente.PerfilFisico。),它只是空的。我检查了数据库中的表格,一切正常。

如果我再次运行系统(我正在使用Netbeans 7.2开发)并且我咨询了刚刚在DB上注册的Delincuente,它显示了所有字段,一切都很完美!!

有代码:

Delincuente.java

@OneToOne(cascade = CascadeType.ALL, mappedBy = "delincuente")
private PerfilFisico perfilFisico;  

PerfilFisico.java

@JoinColumn(name = "PK_IdDelincuente", referencedColumnName = "PK_Identificacion", insertable = false, updatable = false)
@OneToOne(optional = false)
private Delincuente delincuente;

出了什么问题,我已经读了好几天了,我无法弄清楚问题出在哪里。有什么提示吗?

正如我所说它有效,但当你运行它并注册一个新的Delincuente时,你必须重新运行系统才能成功完成咨询并看到PerfilFisico

1 个答案:

答案 0 :(得分:1)

JPA EntityManagers具有托管实体的第一级缓存,而EclipseLink等提供程序具有二级缓存。因此,如果您不维护双向映射的两侧以使它们与db不同步,则除非您强制刷新,清除缓存或重新启动,否则它将不会显示。该应用程序必须保持双向关系,JPA不会为您执行此操作,因为它们应该是pojos。