Hibernate根据持久化对象获取对应数据库表信息(表名,主键等)
这几天要写个DAO层自动记录数据库操作日志的功能,兼容Hibernate及JDBC。
Hibernate开发中需要根据持久层对象获取所映射的数据库表相关信息,如表名,主键,外键对象等相关系。
一、核心的几个方法如下:
获取对象映射缓存管理类
AbstractEntityPersister classMetadata= (AbstractEntityPersister)super.getSessionFactory().getClassMetadata(object.getClass());//表名
String tableName=classMetadata.getTableName();//对象名称
String entityName=classMetadata.getEntityName();//主键列映射属性
String pkPropertyName=classMetadata.getIdentifierPropertyName();//数据库主键列
String[] pkColumns=classMetadata.getIdentifierColumnNames();//反射调用获取主键值
String pkPropertyValue=BeanUtils.getProperty(object, pkPropertyName);
hibernate自带反射取值函数
classMetadata.getPropertyValue(object, propertyName, org.hibernate.EntityMode.POJO);
非主键属性
String[] propertyNames=classMetadata.getPropertyNames();
非主键数据库列
String[] propertyColumns=classMetadata.getPropertyColumnNames(propertyName);
非主键属性是否可修改bool值有序集合boolean[] isUpdateFalgs =classMetadata.getPropertyUpdateability();
非主键属性是否可添加bool值有序集合boolean[] isInsertFlags =classMetadata.getPropertyInsertability();
获取属性数据类型
Type propertyType=classMetadata.getPropertyType(pkPropertyName)
是否是集合类型
propertyType.isCollectionType()
是否是对象类型
propertyType.isEntityType()
是否是时间类型
propertyTypeinstanceofDateType
获取外键对象