2012-08-29 212 views
0

我不能做一個簡單的創建/刪除工作,跨事務。我使用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。但爲什麼失敗?

感謝您的幫助

邁克爾

回答

0

休眠文件說你只能在它覆蓋的equals()和hashCode()上分離的實體操作。明天回去工作時我會看看它是否有效。我不滿意的兩件事:

  • 如果以前分離,實體必須具有標識字段的值,爲什麼不只是使用它?
  • 文件...

我們的數據庫表有長串ID列,所以我不能使用基實體類抽象的getId()。我差不多繼續實現一種方法,通過從我們的實體類反射來檢索@Id字段,然後使用純JPA來查找(),然後再刪除。

順便說一句,我說的是應用於所有實體的泛型方法,而不僅僅是一個用戶類。