Как создать коллекцию гибернации, которая будет перечитываться каждый раз, когда я ее запрашиваю? - PullRequest
2 голосов
/ 28 апреля 2009

У меня есть объект, с которым связана таблица состояний. Таблица состояний управляется другим процессом и содержит список объектов, которые должна обрабатывать моя бизнес-логика. Я хотел бы получать новый снимок таблицы состояний каждый раз, когда я перезагружаю сущность. Как я могу убедиться, что ни одна из частей Hibernate или его библиотек поддержки никогда не кэширует ни одно из значений этой таблицы? По сути, я хочу получить новое представление о коллекции каждый раз, когда я вызываю getMyStateValues ​​().

Ответы [ 3 ]

1 голос
/ 28 апреля 2009

Большая часть Hibernate состоит в том, чтобы предотвратить это и вернуть согласованное представление о состоянии объекта в рамках данной транзакции. Так что либо перезагружайте всю сущность, каждый раз в разных транзакциях. Или, если вам нужно перезагрузить таблицу состояний во время бизнес-транзакции, загрузите только таблицу состояний по идентификатору родительского объекта в отдельном сеансе Hibernate.

0 голосов
/ 28 апреля 2009

Вы можете использовать CacheMode Hibernate. Это позволяет вам проинструктировать сеанс гибернации о том, как взаимодействовать с кешем. Вы можете получить доступ к основному сеансу с помощью:

@PersistenceContext EntityManager manager;
...
org.hibernate.Session session = (Session)manager.getDelegate();

К сожалению, этот метод применяется ко всему сеансу, а не конкретно к сущности.

0 голосов
/ 28 апреля 2009

Вы можете создать метод в вашей сущности, который запрашивает базу данных и возвращает коллекцию. getXYXReload (). Это не очень хорошее дизайнерское решение, подумал.

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