2015-11-30 5 views
2

Мне нужно получить имена столбцов для внешних ключей для всех отображаемых объектов спящего режима. Кто-нибудь знает как это сделать? Я попробовал sessionFactory.getClassMetadata - я могу видеть все имена и типы свойств для всех объектов там, но я не могу найти информацию о внешних ключах. Есть ли у кого-нибудь идеи? Я не могу использовать прямой запрос к базе данных - я должен извлечь его из спящего метаданных.Hibernate получить все внешние ключи для сопоставленных объектов

+0

http://stackoverflow.com/questions/2329588/how-do-i-get-name-of-the-target-table-and-column- – bdshadow

+0

это не подходит. jdbc.getConnectionMetadata вернет отношения DATABASE, и мне нужно строго jpa-отношения (например, некоторые из внешних ключей еще не могут быть созданы на db) – cage

+0

'Table.getForeignKeyIterator()' должен найти все внешние ключи для таблицы. Если я правильно помню, вы можете получить их из 'EntityManagerFactoryBuilderImpl.getHibernateConfiguration(). GetTableMappings()' –

ответ

0

Вы можете использовать Java Reflection:

// Loop through joined columns that has @JoinColumn annotation 
for (Method method : testClass.getMethods()) 
{ 
    if (method.isAnnotationPresent(JoinColumn.class)) 
    { 
     // name parameter is foreign key 
     String foreignKey = method.getAnnotation(JoinColumn.class).name; 

     // if the referencedColumnName is explicitly defined 
     String foreignKey = method.getAnnotation(JoinColumn.class).referencedColumnName; 
    } 
} 
+1

Это не сработает, если используется стратегия именования. –

Смежные вопросы