JPA получить идентификатор объекта - PullRequest
9 голосов
/ 05 ноября 2010

Кто-нибудь знает, как я могу сделать эквивалент в hibernate:

session.getIdentifier(instance);

с JPA?

В EntityManager есть метод содержимого, но это почти так!1007 * Я пишу некоторый код, который действует как преобразователь между сущностями и данными, хранящимися в сеансе (поэтому вместо сериализованного объекта сохраняется только имя класса и идентификатор).

Ответы [ 2 ]

17 голосов
/ 05 ноября 2010

В JPA 2.0 вы можете написать

em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(instance);
10 голосов
/ 07 ноября 2010

Кто-нибудь знает, как я могу сделать эквивалент в hibernate (...) с JPA?

JPA 1.0 не имеет эквивалента, так что если вы застрялис JPA 1.0 вам придется использовать API Hibernate: получите Session из EntityManager и используйте Session#getIdentitifier(Object).

Например, с JBoss (да, getDelegate() - это не переносимый ):

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

Если вы используете JPA 2.0, тогда используйте PersistenceUnitUtil#getIdentity(Object) как предложено axtavt .Но это не доступно в JPA 1.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...