Ответ 1
Благодаря Jherico я узнал, как это сделать:
((Column) sessionFactoryBean.getConfiguration().getClassMapping(Person.class.getName())
.getProperty("myProperty").getColumnIterator().next()).getName();
Как я могу получить доступ к отображению Hibernate моей модели, чтобы узнать имя столбца свойства?
Имя столбца не указано в сопоставлении, поэтому Hibernate генерирует его автоматически - я хотел бы создать собственный SQL-оператор, включающий это имя столбца.
Благодаря Jherico я узнал, как это сделать:
((Column) sessionFactoryBean.getConfiguration().getClassMapping(Person.class.getName())
.getProperty("myProperty").getColumnIterator().next()).getName();
((AbstractEntityPersister) sessionFactory.getClassMetadata(o.getClass()))
.getPropertyColumnNames(property)[0];
У вас должен быть доступ к объекту Конфигурация Hibernate.
Это приведет к получению одноуровневых композитов и нормальных сопоставлений свойств:
String columnName(String name) {
PersistentClass mapping = configuration.getClassMapping(ExtendedPerson.class.getName());
Property property = mapping.getProperty(name);
if(property.isComposite()){
Component comp = (Component) property.getValue();
property = comp.getProperty(StringHelper.unroot(name));
assert ! property.isComposite(); //go only one level down
}
Iterator<?> columnIterator = property.getColumnIterator();
Column col = (Column) columnIterator.next();
assert ! columnIterator.hasNext();
return col.getName();
}