双向多对多JPA

zkr*_*ine 2 java mapping jpa eclipselink

我很难接受JPA,希望有人可以帮助我.

我有3张桌子:

  • Rol(CPE_ROL)
  • TipoUsuario(GTV_TIPOUSU)
  • RolTipoUsuario(CPE_ROLTUS - 加入表)

Rol.java

@JoinTable(name = "CPE_ROLTUS", joinColumns = {
    @JoinColumn(name = "CPE_ROLTUS_TIPOUSU_ID", referencedColumnName = "GTV_TIPOUSU_ID")}, inverseJoinColumns = {
    @JoinColumn(name = "CPE_ROLTUS_ROL_ID", referencedColumnName = "CPE_ROL_ID")})
@ManyToMany(fetch = FetchType.LAZY, cascade={CascadeType.REFRESH})
private List<TipoUsuario> tipoUsuarioList;
Run Code Online (Sandbox Code Playgroud)

TipoUsuario.java

@ManyToMany(mappedBy = "tipoUsuarioList", fetch = FetchType.LAZY, cascade={CascadeType.REFRESH})


private List<Rol> rolesDefault;
Run Code Online (Sandbox Code Playgroud)

由于某种原因,角色默认永远不会被填满,我想知道我是否遗漏了一些东西.

提前致谢.

丹尼尔

Jam*_*mes 5

我的猜测是,当您创建对象时,您没有设置关系的两侧.您必须在JPA中保持双向关系.当您添加到一侧时,也会添加到另一侧.

请参阅 http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Object_corruption.2C_one_side_of_the_relationship_is_not_updated_after_updating_the_other_side

您很可能已启用缓存,或者正在使用相同的EntityManager,因此在读取时您将从缓存中获取对象.您还可以禁用共享缓存或刷新对象,但最好修复持久性代码.

否则,启用最好的登录并查看执行的SQL.