2010-11-05 68 views
9

有誰知道我怎麼能做到這相當於處於休眠:JPA得到實體對象的ID

session.getIdentifier(instance); 

與JPA?

EntityManager有一個包含的方法,但這幾乎是它!我寫了一些代碼,充當實體和存儲在會話中的數據之間的轉換(而不是僅存儲序列化對象,只存儲類名和id)。

回答

10

有誰知道我該怎麼做的這個休眠與JPA相當於(...)?

JPA 1.0,所以如果你堅持JPA 1.0沒有等價物,你必須使用Hibernate的API:獲得來自EntityManagerSession和使用Session#getIdentitifier(Object)

例如,與JBoss(是的,getDelegate()not portable):

org.hibernate.Session session = (Session)manager.getDelegate(); 
session.getIdentifier(myEntity); 

如果使用JPA 2.0,然後使用通過PersistenceUnitUtil#getIdentity(Object)作爲axtavt建議。但是這在JPA 1.0中不可用。

+0

感謝您的詳細解答。非便攜式解決方案應該可以很好地作爲臨時解決方案。 – ishmeister 2010-11-07 12:46:14

16

在JPA 2.0你可以寫

em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(instance); 
+0

+1(我正在搜索MetaModel和EntityType的深度,但從來沒有想過去查看EntityManagerFactory內部)。 – 2010-11-05 15:01:59

+0

謝謝,我將不得不考慮升級到JPA 2.0。 – ishmeister 2010-11-07 12:45:13