JPA获取实体对象的id

ish*_*ter 9 java hibernate jpa

有谁知道我怎么能在休眠中做相同的事情:

session.getIdentifier(instance);
Run Code Online (Sandbox Code Playgroud)

与JPA?

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

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

axt*_*avt 17

在JPA 2.0中,您可以编写

em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(instance);
Run Code Online (Sandbox Code Playgroud)


Pas*_*ent 10

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

JPA 1.0,所以如果你坚持JPA 1.0没有等价物,你必须使用Hibernate的API:获得Session来自EntityManager和使用Session#getIdentitifier(Object).

例如,与JBoss(是的,getDelegate()不可移植的):

org.hibernate.Session session = (Session)manager.getDelegate();
session.getIdentifier(myEntity);
Run Code Online (Sandbox Code Playgroud)

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