我无法跨事务进行简单的创建/删除工作。我使用 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() 可以删除分离的或托管的。但是为什么失败了?
感谢帮助
迈克尔