获取使用Hibernate映射的属性的列名

时间:2010-01-07 21:10:22

标签: java sql hibernate

如何访问模型的Hibernate映射以找出属性的列名?

映射中未指定列名,因此Hibernate会自动生成它 - 我想创建一个包含此列名的本机SQL语句。

4 个答案:

答案 0 :(得分:16)

感谢Jherico我发现了如何做到这一点:

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

答案 1 :(得分:3)

((AbstractEntityPersister) sessionFactory.getClassMetadata(o.getClass()))
    .getPropertyColumnNames(property)[0];

答案 2 :(得分:1)

您必须有权访问Hibernate配置对象。

答案 3 :(得分:1)

这将检索一级复合和普通属性映射:

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();
}