2010-01-07 21 views

Respuesta

11

Gracias a Jherico he encontrado la manera de hacer que:

((Column) sessionFactoryBean.getConfiguration().getClassMapping(Person.class.getName()) 
     .getProperty("myProperty").getColumnIterator().next()).getName(); 
+3

¿Qué es "sessionFactoryBean" aquí? Estoy seguro de que no es sessionFactory. – instanceOfObject

+0

puede ser sessionFactory o SessionFactoryBean, depende de la versión – Shilan

1

Debe tener acceso al objeto de configuración de Hibernate.

+0

que debería ser posible en un resorte entorno ... –

1

Esto va a recuperar materiales compuestos de un solo nivel y asignaciones normales de propiedad:

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(); 
} 
3
((AbstractEntityPersister) sessionFactory.getClassMetadata(o.getClass())) 
    .getPropertyColumnNames(property)[0]; 
+0

Debe usar 'Hibernate.getClass (o)' en lugar de 'o.getClass()' en caso de que 'o' sea un proxy. –

Cuestiones relacionadas