English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Краткое рассмотрение проблемы срочной загрузки Hibernate (ассоциации с несколькими внешними ключами)

Структура базы данных такая

В strategy есть внешние ключи member_id (связанные с таблицей member) и strategy_category (связанные с таблицей category), а в таблице member есть внешние ключи position_id (связанные с таблицей positions)

Если前台 страница напрямую запрашивает содержимое таблицы strategy, то наш hql запрос будет выглядеть так

String hql = "FromStrategywhereid=:id";

Консоль будет выдавать ошибку nosession, потому что по умолчанию hibernate использует ленивую загрузку, и объекты关联对象只有在需要的时候才会被加载出来。Здесь, когда мы на переднем плане пытаемся получить атрибуты объекта关联, сессия уже закрыта, и поэтому появляется такая ошибка

Как же решить эту проблему?

Рекомендуется использовать способ leftjoinfetch для загрузки объектов, а не изменять избыточную загрузку по умолчанию в аннотации на срочную загрузку, так как это будет очень неэффективно.

Фраза такова:

Strategystrategy=(Strategy)sessionFactoryUtil.getSession()
.createQuery("FromStrategysleftjoinfetchs.strategyCategoryleftjoinfetchs.memberleftjoinfetchs.member.positionswheres.id=:id")
.setInteger("id",id).uniqueResult();

Важно отметить, что, поскольку таблица member связана с таблицей positions, ее также необходимо загрузить. Другое важное замечание: s.id должен быть записан следующим образом, так как в каждой таблице имя главного ключа составляет id, и если не указать, система не сможет определить.

Обобщение

Вот и все, что касается нашего краткого обсуждения проблемы срочной загрузки hibernate (множественные внешние ключи). Надеюсь, это поможет вам. Те, кто интересуется, могут продолжить читать другие связанные темы на этом сайте, и если у вас есть какие-либо недостатки, пожалуйста, оставьте комментарий. Спасибо за поддержку сайта!

Заявление: содержимое этой статьи взято из интернета, авторское право принадлежит соответствующему автору, контент предоставлен пользователями Интернета по собственной инициативе и загружен самостоятельно. Этот сайт не имеет права собственности на него, не редактировался вручную и не несет ответственности за него. Если вы обнаружите подозрительное нарушение авторских прав, пожалуйста, отправьте письмо по адресу notice#oldtoolbag.com (при отправке письма замените # на @) для сообщения и предоставьте соответствующие доказательства. При подтверждении факта нарушения авторских прав сайт незамедлительно удалят подозрительное нарушение авторских прав.

Основной курс
Давайте полюбим это