Отсоединить сущность от контекста персистентности JPA / EJB3 - PullRequest
54 голосов
/ 28 августа 2008

Какой самый простой способ отсоединить конкретный объектный компонент JPA, полученный через EntityManager. В качестве альтернативы, мог бы я вначале вернуть запрос на отсоединенные объекты, чтобы они по существу действовали как «только для чтения»?

Причина, по которой я хочу это сделать, заключается в том, что я хочу изменить данные внутри компонента - только в моем приложении, но никогда не сохранялось в базе данных. В моей программе мне в конечном итоге придется вызывать flush () в EntityManager, который сохранит все изменения от прикрепленных сущностей к базе данных underyling, но я хочу исключить определенные объекты.

Ответы [ 14 ]

1 голос
/ 28 августа 2008

Если в компоненте не слишком много свойств, вы можете просто создать новый экземпляр и установить все его свойства вручную из сохраняемого компонента.

Это может быть реализовано как конструктор копирования, например:

public Thing(Thing oldBean) {
  this.setPropertyOne(oldBean.getPropertyOne());
  // and so on
}

Тогда:

Thing newBean = new Thing(oldBean);
0 голосов
/ 25 октября 2018

Я думаю, что есть способ выселить одну сущность из EntityManager, позвонив по этому

EntityManagerFactory emf;
emf.getCache().evict(Entity);

Это удалит конкретную сущность из кэша.

0 голосов
/ 27 мая 2011

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

for(RssItem i : result.getChannel().getItem()){
}

Cloneable не будет работать, потому что фактически копирует PersistantBag.

И забудьте об использовании сериализуемых и байтовых потоков и потоковых каналов. создание потоков, чтобы избежать тупиков, убивает всю концепцию.

0 голосов
/ 27 ноября 2009

Я думаю, вы также можете использовать метод EntityManager.refresh (Object o), если первичный ключ объекта не был изменен. Этот метод восстановит исходное состояние объекта.

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