Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate会话和实体管理器是否共享同一事务?_Java_Hibernate_Session_Transactions - Fatal编程技术网

Java Hibernate会话和实体管理器是否共享同一事务?

Java Hibernate会话和实体管理器是否共享同一事务?,java,hibernate,session,transactions,Java,Hibernate,Session,Transactions,我们目前正在应用程序上使用Hibernate 3.6。应用程序充分利用了Hibernate会话,SpringHibernateTemplate——最近我们开始将代码迁移到更标准的实体管理器,但这是一个渐进的过程 所以我遇到了一个问题,我们在一个方法(服务方法是@Transactional)中同时使用hibernate会话和实体管理器,并且一个操作依赖于另一个,如下所示: hqlQuery = session.createQuery("DELETE FROM address WHERE user_

我们目前正在应用程序上使用Hibernate 3.6。应用程序充分利用了Hibernate会话,SpringHibernateTemplate——最近我们开始将代码迁移到更标准的实体管理器,但这是一个渐进的过程

所以我遇到了一个问题,我们在一个方法(服务方法是@Transactional)中同时使用hibernate会话和实体管理器,并且一个操作依赖于另一个,如下所示:

hqlQuery = session.createQuery("DELETE FROM address WHERE user_id = 1");
hqlQuery.executeUpdate();

jpaQuery = em.createQuery("DELETE FROM user WHERE id = 1");
jpaQuery.executeUpdate();
// this throws org.hibernate.exception.ConstraintViolationException - cannot delete user because there are still references to this user in address
我怀疑这可能是因为Hibernate对会话和EntityManager使用了不同的事务(在不同的连接中)——addreses的删除在一个事务中完成,用户的删除在第二个事务中完成——那么很清楚为什么用户的删除会因外键约束而失败

会话和EntityManager共享同一个事务管理器,但我不知道这是否重要

我想通过从session.getTransaction()和em.getTransaction()获取一些事务ID来测试这一点,但没有标识符

所以问题是-会话和EntityManager之间是否可以共享一个事务?如果是,怎么做


谢谢

您是否使用Hibernate作为JPA提供程序?是否所有实体都在Hibernate和JPA中映射?是的,Hibernate用作JPA提供程序。所有实体都在JPA和Hibernate中映射。本质上,我们使用JPA EntIdMeor来管理我们使用Hibernate EntEng/Session的确切内容。您可以考虑使用EntMyMealth.UnrWAP(session .class)来获得Hibernate会话,而不是同时拥有Hibernate SeStudio工厂和EntityManagerFactory: