我不能在事务中进行简单的创建/删除工作 . 我使用Spring / JPA / Hibernate,没有ehcache .
我的实体类User和MyDao有两个方法标记为Spring的@Transactional(我理解@Transactional应该在服务上,这里只是简化我的情况)
public class MyDao {
@PersistenceContext
private EntityManager entityManager;
@Transactional
public void create(User user) {
entityManager.persist(user);
entityManager.refresh(user);
}
@Transactional
public void delete(User user) {
// Since user maybe detached, I use Hibernate to delete.
Session sess = entityManager.unwrap(Session.class);
sess.delete(user);
}
}
我的测试:
{
User user = new User();
myDao.create(user);
// above is ok. user created with generated ID.
// and I assume the transaction is closed, so user is detached
myDao.delete(user);
// above failed with error "Removing a detached instance ..."
}
根据Hibernate,session.delete()可以删除分离或托管 . 但为什么它失败了?
感谢帮助
迈克尔
1 回答
Hibernate文档表示只有当它覆盖equals()和hashCode()时才能对分离实体进行操作 . 我会在明天回到工作岗位时看看它是否有效 . 我不满意的两件事:
如果先前已分离,则实体必须具有身份字段的值,为什么不使用它?
该文件......
我们的db表有长列和ID列的字符串,所以我不能使用带有抽象getId()的基本实体类 . 我几乎继续实现一个方法来通过实体类的反射来检索@Id字段,然后是纯JPA,先查找()然后删除 .
顺便说一句,我说的是应用于我们所有实体的泛型方法,而不仅仅是一个User类 .