【发布时间】:2013-11-13 19:17:12
【问题描述】:
我想在另一个持久性上下文中管理一个非托管实体。我读到这可以通过合并来实现:
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 和 user 完全一样。
我做错了什么?
我正在使用 JPA、MySql DB、JBoss EAP 6.1
【问题讨论】:
-
您是否开始并提交了事务?此外,请执行:
dbuser = em.merge(user); -
我可以使用 JPA(没有 Spring 等或本机 Hibernate)启动事务吗?我只是使用@TransactionManagement(TransactionManagementType.CONTAINER)
-
可以通过
em.getTransaction()调用.begin()、.commit()、.rollback()获取交易对象。但是,在您的配置中,这可能不是必需的,甚至是不可能的(当使用 JTA EntityManager 时)。 -
user = em.merge(user);成功了。谢谢。 (即使没有 find()。正如预期的那样)
-
不客气。刚刚注意到,我不小心混淆了
user和dbuser...