2013-06-19 70 views
4

如何知道Hibernate是否在插入或更新後運行getHibernateTemplate().saveOrUpdate(object);該方法無效!有一種方法可以檢查Hibernate方法.saveOrUpdate()是否插入或更新?

saveOrUpdate()方法執行以下操作:

  • 如果對象是在這個會議上已經執着,什麼也不做
  • 如果這個session中有另外一個對象具有同樣的標識符,拋出一個異常
  • 如果對象沒有標識符屬性,save()它
  • 如果對象的標識符具有賦值給新實例的值ated對象,保存()它
  • 如果對象是由一個或版本化,並且版本屬性值是分配給一個新實例化的對象相同的值,保存()它
  • 否則更新()對象

恐怕我總是要檢查的對象已經有一個「主鍵/ ID」前運行此方法,這是唯一的辦法?如果是,我怎樣才能以通用的方式獲得主鍵/ ID?

Serializable id = session.getIdentifier(entity);Object id = entityManagerFactory.getPersistenceUnitUtil().getIdentifier(entity); ??

回答

2

是的,檢查持久化上下文中與實體關聯的標識符意味着我們正在檢查實體是否處於持久狀態。 由於你已經提到了我建議的文檔,請看看這個問題, Hibernate saveOrUpdate behavior - 看看奧拉夫的答案,它解釋了它如何以簡短和甜美的方式工作。

與JPA 2.0我們有

對象ID = entityManagerFactory.getPersistenceUnitUtil()則getIdentifier(實體)。檢查方式。

然而,你的問題被標記爲休眠,所以第一個是正確的。

Serializable id = session.getIdentifier(entity);

+0

感謝您的回答,但我通過檢查'id'atributte來結束它,在我的案例中,它出現在所有類中,實際上是主鍵:FieldID = entity.getClass()。getDeclaredField ID); id.setAccessible(真);' – edudoda

相關問題