我无法跨事务进行简单的创建/删除工作。我使用 Spring/JPA/Hibernate,没有 ehcache。
我的实体类 User 和 MyDao 使用 Spring 的 @Transactional 标记的两个方法(我知道 @Transactional 应该在服务中,这里只是简化我的情况)
公共类 MyDao { @PersistenceContext 私有实体管理器实体管理器; @Transactional 公共无效创建(用户用户){ entityManager.persist(user); entityManager.refresh(user); } @Transactional 公共无效删除(用户用户){ // 由于用户可能已分离,因此我使用 Hibernate 进行删除。 会话 sess = entityManager.unwrap(Session.class); sess.delete(用户); } }
我的测试:
{ 用户用户 = 新用户(); myDao.create(user); // 上面没问题。使用生成的 ID 创建的用户。 // 我假设事务已关闭,因此用户已分离 myDao.delete(user); // 上面失败并出现错误“正在删除一个分离的实例......” }
根据 Hibernate, session.delete() 可以删除分离的或托管的。但是为什么失败了?
感谢帮助
迈克尔