有誰知道我怎麼能做到這相當於處於休眠:JPA得到實體對象的ID
session.getIdentifier(instance);
與JPA?
EntityManager有一個包含的方法,但這幾乎是它!我寫了一些代碼,充當實體和存儲在會話中的數據之間的轉換(而不是僅存儲序列化對象,只存儲類名和id)。
有誰知道我怎麼能做到這相當於處於休眠:JPA得到實體對象的ID
session.getIdentifier(instance);
與JPA?
EntityManager有一個包含的方法,但這幾乎是它!我寫了一些代碼,充當實體和存儲在會話中的數據之間的轉換(而不是僅存儲序列化對象,只存儲類名和id)。
有誰知道我該怎麼做的這個休眠與JPA相當於(...)?
JPA 1.0,所以如果你堅持JPA 1.0沒有等價物,你必須使用Hibernate的API:獲得來自EntityManager
的Session
和使用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中不可用。
在JPA 2.0你可以寫
em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(instance);
+1(我正在搜索MetaModel和EntityType的深度,但從來沒有想過去查看EntityManagerFactory內部)。 – 2010-11-05 15:01:59
謝謝,我將不得不考慮升級到JPA 2.0。 – ishmeister 2010-11-07 12:45:13
感謝您的詳細解答。非便攜式解決方案應該可以很好地作爲臨時解決方案。 – ishmeister 2010-11-07 12:46:14