JPA / Как получить объект в режиме только для чтения? - PullRequest
0 голосов
/ 16 марта 2011

Я сталкиваюсь с проблемой, когда мне нужно два раза получить объект в режиме только для чтения, чтобы сравнить их (необходимо отделить объекты от базы данных, указывающей на один и тот же объект, и перед сравнением я выполняю над ними некоторые операции) , Так как мой JPA и Hibernate не поддерживают detach () в EntityManager, и я не могу изменить его на более новую версию, есть ли способ для этого, чтобы я мог получить эти два?

Заранее спасибо за помощь,

P.

Ответы [ 3 ]

0 голосов
/ 16 марта 2011

Я думаю, что вы можете получить базовый Hibernate Session с em.getDelegate() и вызвать evict() на нем.

0 голосов
/ 30 марта 2011

Мне удалось достичь своей цели с помощью обходного пути, используя одну из функций библиотеки Apache Commons, а точнее Common BeanUtils (http://commons.apache.org/beanutils/).Он содержит способ скопировать содержимое объекта EJB, который отсоединен, и дальнейшую обработку без влияния на данные в базе данных.

Спасибо за помощь,

С уважением, P.

0 голосов
/ 16 марта 2011

Вы можете перенести свою сущность в другой бин, такой как MyUnmanagedEntity, после получения. Просто используйте подкласс, который не отображается как @Entity, и поэтому он не будет сохранен. Инициируйте его, используя правильный конструктор, который берет оригинал и передает все поля, которые вам нужны.

Другой способ - close() ваш EntityManager, чтобы он прекратил управлять вашими сущностями. Но это затронет и все другие управляемые объекты.

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