我正在使用hibernate Criteria
类来获取表的所有记录:
Criteria criteria = session.createCriteria(AppTaskConfig.class)
我想获取列名,因为我需要将结果集转换为JSON格式。
答案 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