7

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

Criteria criteria = session.createCriteria(AppTaskConfig.class)

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

4

5 回答 5

14

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

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

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

现在使用 Hibernateorg.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();
}
于 2013-10-17T08:16:00.340 回答
2

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

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

使用休眠 4,我就像 @Debojit Saikia

于 2018-04-05T18:57:58.730 回答
0

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

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

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

于 2013-10-17T05:38:28.013 回答
0
String[] columnNames = getSessionFactory().getClassMetadata(Employee.class).getPropertyNames();

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

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

于 2016-05-12T11:24:39.367 回答
0

您可以使用反射 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
于 2017-08-08T12:31:38.237 回答