Двунаправленный Многие ко Многим JPA - PullRequest
2 голосов
/ 08 марта 2011

Мне тяжело с 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;

TipoUsuario.java

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


private List<Rol> rolesDefault;

По некоторым причинам роли по умолчаниюникогда не заполняется, мне интересно, если я что-то упустил.

Заранее спасибо.

Даниэль

1 Ответ

5 голосов
/ 08 марта 2011

Я предполагаю, что когда вы создаете объекты, вы не устанавливаете обе стороны отношений. Вы должны поддерживать двунаправленные отношения в 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 выполняется.

...