2013-11-02 3 views
6

Я хотел бы сделать неуправляемый объект управляемым в другом контексте сохранения. Я читал, что это может быть сделано с слияния:jpa слияние неуправляемого объекта

em.merge(user); 

Но если я это делать не добавляется к контексту:

boolean isManaged = em.contains(user); 

всегда ложно.

Даже если я сделать следующее:

User dbuser = em.find(User.class, user.getId()); 
em.merge(user); 
boolean isManaged = em.contains(user); 

DBUser и пользователя точно так же.

Что я делаю неправильно?

Я использую JPA, MySql DB, JBoss EAP 6.1

+3

Вы начали и совершили транзакцию? Кроме того, do: 'dbuser = em.merge (пользователь);' – Sam

+0

Могу ли я начать транзакцию с JPA (без Spring или с родным Hibernate)? Я просто использую @TransactionManagement (TransactionManagementType.CONTAINER) – Dave

+0

Можно получить объект транзакции с помощью 'em.getTransaction()' для вызова '.begin()', '.commit()', '.rollback()'. Однако это может быть не обязательно или даже невозможно (при использовании JTA EntityManager) в вашей конфигурации. – Sam

ответ

0

вызовов entityManager.flush() совершить ваше слияние действия в базу данных.

Усушливо фиксация задерживается. Например, если ваш метод имеет аннотацию @TransactionAttribute. Транзакция будет совершена после завершения метода. Но если вы вызываете em.contains(user) без фиксации, вы просто получаете старое состояние.

Смежные вопросы