休眠/ 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来查找(),然后再删除。

顺便说一句,我说的是应用于所有实体的泛型方法,而不仅仅是一个用户类。