не удалось лениво инициализировать коллекцию ролей: com.pojo.Student.phonenos, сеанс или сеанс не был закрыт

StackOverflow https://stackoverflow.com/questions/7832433

Вопрос

Я изучаю отображение гибернации с помощью аннотации. Я закончил один раздел. Т.е. Я могу автоматически вставлять дочерний класс при сохранении родительской таблицы. see_that .

Но мне не удалось получить дочернюю таблицу, когда я получил главную таблицу. Также появляется ошибка

родовое слово

Мой код добавлен сюда, чтобы вы могли его просмотреть. Пожалуйста, пройдите через это. И дайте мне отличный совет. Student.java. (родительский класс)

родовое слово

Phone.java (дочерний класс)

родовое слово

мой класс дао

родовое слово

Выход

родовое слово

Здесь я использую однонаправленное (внешний ключ) сопоставление «один-ко-многим» (не объединенная таблица, двунаправленное).

Резюмирую свой вопрос

1) как получить дочернюю таблицу, когда мы получаем родительскую таблицу, и наоборот

2) что такое нетерпеливое и ленивое получение.

3) таблица однонаправленных, двунаправленных и соединений в случае сопоставления «один-ко-многим», какая из них является более полной.

Это было полезно?

Решение

1)

Если вы действительно хотите делать это каждый раз при извлечении любого объекта из этих классов, укажите FetchMode.EAGER в ассоциации @OneToMany. @ManyToOne по умолчанию активны. Имейте в виду, что это может быть в значительной степени неэффективным, если вам нужно получить эти объекты только в определенных обстоятельствах. В этом случае вы должны сделать это так же, как и вы, но убедитесь, что сеанс, в котором был получен объект Student, все еще открыт. Видя, что вы используете Spring, пробовали ли вы аннотировать свой DAO / Service с помощью @Transactional, чтобы сеанс оставался активным во время выполнения метода? Или вы пробовали использовать Hibernate.execute(), например:

родовое слово

2) Взгляните на этот вопрос: Разница между FetchType LAZY и EAGER в персистентности Java? .

3) Это зависит от того, что вам нужно. Если вам нужно перемещаться по ассоциации только одним способом, определите ее однонаправленной только таким образом. Если вам нужно и то, и другое, сделайте и то, и другое. Присоединение к таблице больше связано с дизайном базы данных. Если вы хотите иметь FK в таблице Phone со ссылкой на код Student, которому принадлежит телефон, или вы хотите иметь таблицу соединений с кодом Phones для каждого кода Student.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top