двунаправленный один-ко-многим с присоединяемым - PullRequest
12 голосов
/ 20 февраля 2012

У меня возникли некоторые проблемы при получении двунаправленной ассоциации один-ко-многим, работающей с JoinTables. Вот что я получил:

Класс A:

@OneToMany
@JoinTable(name="join_table", 
    JoinColumns={@JoinColumn(name="a_id")},
    inverseJoinColumns={@JoinColumn(name="b_id")}
)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
public Set<B> getBs() {
    return bs;
}

Класс B:

@ManyToOne
@JoinTable(name="join_table", 
    joinColumns={@JoinColumn(name="b_id", insertable=false,updatable=false)},
    inverseJoinColumns={@JoinColumn(name="a_id", insertable=false,updatable=false)})
public A getA() {
    return a;
}

Если я создаю экземпляр A и B, добавляю экземпляр B в A и сохраняю. Оно работает. Но когда я перезагружаю экземпляр A и пытаюсь получить доступ к набору B, он выдает LazyInitializationError с сообщением «незаконный доступ к загрузке коллекции».

Где я здесь не так? :) Кто-нибудь может указать мне на пример двунаправленной ассоциации, которая использует таблицу соединений. А там, где права собственности принадлежат классу А, я искал документацию на hibernate.org, но, похоже, не могу ее найти.

-Daniel

1 Ответ

7 голосов
/ 20 февраля 2012

Ваше отображение правильное, и поэтому запись сохраняется в базе данных.Проблема при извлечении из-за Ленивая Инициализация .

Чтобы решить эту проблему, измените отображение класса A как

@OneToMany(fetch=FetchType.LAZY)
@JoinTable(name="join_table", 
    joinColumns={@JoinColumn(name="a_id")},
    inverseJoinColumns={@JoinColumn(name="b_id")}
)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
public Set<B> getBs() {
    return bs;
} 

Thisзапустит дополнительный запрос к таблице B и инициализирует коллекцию.Это может повлиять на производительность в зависимости от количества записей в таблице ответчика.

Для получения дополнительной информации ознакомьтесь с API здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...