Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Получение primary key у entity


Автор: force 27.1.2008, 18:04
Может кто-нибудь знает универсальный способ, как получить primary key у какой-либо entity. Она может быть как аннотированной (@Entity), так и объявленной в *.hbm.xml. entity могут быть любые, из каких-либо библиотек, поэтому вариант, чтобы они все реализовывали какой-либо интерфейс, содержащий метод getId() не подходит. Можно конечно предположить, что именно метод getId() возвращает этот ключ и вызывать его через рефлексию, но где-нибудь можно и обломаться. У EntityManager никаких похожих методов нет :(
Если рассматривать только классы, маппинг которых объявлен при помощи аннотаций, то здесь можно просто искать метод с аннотацией @Id и всё. Но нужно ещё как-то с xml маппингом решать.

Автор: AlexeyVorotnikov 28.1.2008, 12:10
Речь идёт о Hibernate, я не ошибаюсь?

Попробуйте посмотреть в сторону Configuration.getClassMapping(String entityName).getTable().getPrimaryKey().

Автор: force 28.1.2008, 19:56
Спасибо!
Но вся работа идет через EntityManager. Хибернейтовский конфиг просто включен в persistence.xml:
Код

<property name="hibernate.ejb.cfgfile"
value="/hibernate.cfg.xml"/>

Автор: Ornitos 31.1.2008, 13:33
Код

EntityManager entityManager = // ...
Session session = (Session) entityManager.getDelegate();
Serializable key = session.getIdentifier(someEntity) ;



Цитата(AlexeyVorotnikov @  28.1.2008,  12:10 Найти цитируемый пост)
Configuration.getClassMapping(String entityName).getTable().getPrimaryKey()

Этот способ возвращает не значение ключа, а его описание в виде объекта Property. Плюс он не универсален. Для создания фабрики сессий может использоваться, например, AnnotationConfiguration. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)