JPA获取实体对象的id

时间:2010-11-05 14:42:23

标签: java hibernate jpa

有谁知道我怎么能在休眠方式中做到这一点:

session.getIdentifier(instance);

JPA?

EntityManager有一个contains方法,但就是这样!

我正在编写一些代码,它们充当实体和存储在会话中的数据之间的转换器(因此,而不是仅存储类名并且存储了id的序列化对象)。

2 个答案:

答案 0 :(得分:17)

在JPA 2.0中,您可以编写

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

答案 1 :(得分:10)

  

有没有人知道我如何在使用JPA的hibernate(...)中完成相同的操作?

JPA 1.0没有等效的,所以如果你坚持使用JPA 1.0,你将不得不使用Hibernate的API:从Session获取EntityManager并使用{{3} }。

例如,使用JBoss(是的,getDelegate()Session#getIdentitifier(Object)):

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

如果您使用的是JPA 2.0,请按not portable的建议使用PersistenceUnitUtil#getIdentity(Object)。但这在JPA 1.0中不可用。