English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Структура базы данных такая
В 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 (при отправке письма замените # на @) для сообщения и предоставьте соответствующие доказательства. При подтверждении факта нарушения авторских прав сайт незамедлительно удалят подозрительное нарушение авторских прав.