我正在使用休眠Criteria
类来获取表的所有记录:
Criteria criteria = session.createCriteria(AppTaskConfig.class)
我还想获取列名,因为我需要将结果集转换为 JSON 格式。
要获得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();
}
使用 hibernate 5 获取列名的更简单方法
final AbstractEntityPersister classMetadata = (AbstractEntityPersister) sessionFactory.getClassMetadata(clazz)
final String[] names = classMetadata.getPropertyColumnNames(property)
使用休眠 4,我就像 @Debojit Saikia
实体的列名是什么?实体可以使用表的某些列而没有其他字段。
Entity 可以扩展另一个 Entity 类,因此 Entity 类的字段由来自不同表的列表示。
您可以运行本机 SQl 查询并查看表列。
String[] columnNames = getSessionFactory().getClassMetadata(Employee.class).getPropertyNames();
org.hibernate.type.Type[] columnTypes = getSessionFactory().getClassMetadata(Employee.class).getPropertyTypes();
试试这个这是正常的......
您可以使用反射 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