休眠/ JPA简单的创建/删除实体
问题描述:
我不能做一个简单的创建/删除工作,跨事务。我使用Spring/JPA/Hibernate,没有ehcache。休眠/ JPA简单的创建/删除实体
我的实体类用户,并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()可以删除detached或managed。但为什么失败?
感谢您的帮助
迈克尔
答
休眠文件说你只能在它覆盖的equals()和hashCode()上分离的实体操作。明天回去工作时我会看看它是否有效。我不满意的两件事:
- 如果以前分离,实体必须具有标识字段的值,为什么不只是使用它?
- 文件...
我们的数据库表有长串ID列,所以我不能使用基实体类抽象的getId()。我差不多继续实现一种方法,通过从我们的实体类反射来检索@Id字段,然后使用纯JPA来查找(),然后再删除。
顺便说一句,我说的是应用于所有实体的泛型方法,而不仅仅是一个用户类。