Java jpa合并非托管实体

Java jpa合并非托管实体,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,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和user完

我想在另一个持久性上下文中管理一个非托管实体。我了解到这可以通过合并实现:

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调用entityManager.flush()将合并操作提交到数据库中


通常,提交会被延迟。例如,如果您的方法具有
@TransactionAttribute
注释。事务将在方法完成后提交。但是如果您调用
em.contains(user)
而没有提交,您只会得到旧状态

您是否开始并提交事务?此外,do:
dbuser=em.merge(user)我可以用JPA启动事务吗(没有Spring等或本机Hibernate)?我只使用@TransactionManagement(TransactionManagementType.CONTAINER)就可以通过调用
.begin()
.commit()
.rollback()
获得带有
em.getTransaction()
的事务对象。但是,在您的配置中,这可能不是必需的,甚至是不可能的(当使用JTA EntityManager时);成功了。谢谢(即使没有找到()。如预期)不客气。刚刚注意到,我不小心混淆了
user
dbuser
。。。