在Hibernate中获取表列名称

时间:2013-10-17 04:48:09

标签: java json hibernate

我正在使用hibernate Criteria类来获取表的所有记录:

Criteria criteria = session.createCriteria(AppTaskConfig.class)

我想获取列名,因为我需要将结果集转换为JSON格式。

5 个答案:

答案 0 :(得分:15)

要获得column names,首先您需要使用properties找到实体的org.hibernate.metadata.ClassMetadata

ClassMetadata classMetadata = sessionFactory.getClassMetadata(AppTaskConfig.class);
String[] propertyNames = classMetadata.getPropertyNames();

其中propertyNames是表示AppTaskConfig的属性名称的字符串数组。

现在使用Hibernate org.hibernate.cfg.Configuration对象,您可以找到properties的列名:

for (String property : propertyNames) {
    Configuration configuration = sessionFactoryBean.getConfiguration();
    PersistentClass persistentClass = configuration
                    .getClassMapping(Details.class.getName());
    String columnName = ((Column) persistentClass.getProperty(property)
                    .getColumnIterator().next()).getName();
}

答案 1 :(得分:1)

使用hibernate 5获取列名的简便方法

final AbstractEntityPersister classMetadata = (AbstractEntityPersister) sessionFactory.getClassMetadata(clazz)
final String[] names = classMetadata.getPropertyColumnNames(property)

对于hibernate 4,我喜欢@Debojit Saikia

答案 2 :(得分:0)

实体的列名是什么?实体可以使用表的某些列,而没有其他字段。

实体可以扩展另一个Entity类,因此Entity类的字段由不同表中的列表示。

您可以运行本机SQl查询并查看表格列。

答案 3 :(得分:0)

String[] columnNames = getSessionFactory().getClassMetadata(Employee.class).getPropertyNames();

  org.hibernate.type.Type[] columnTypes = getSessionFactory().getClassMetadata(Employee.class).getPropertyTypes();

试试这是正常的......

答案 4 :(得分:0)

您可以使用Reflection API访问字段/ getter的已声明JPA注释,例如Column o JoinColumn。

import javax.persistence.Column;
import javax.persistence.JoinColumn;

// get declared field
Field field = persistentClass.getDeclaredField("property");

// get declared method
Method method = persistentClass.getMethod("get"+property.substring(0,1).toUpper()+property.substring(1)));

// access to declared annotations or field or method to find Column or JoinColumn