//通過EntityManager獲取factory
EntityManagerFactory entityManagerFactory = (你自己的entityManager對象).getEntityManagerFactory();
SessionFactoryImpl sessionFactory = (SessionFactoryImpl)entityManagerFactory.unwrap(SessionFactory.class);
Map<String, EntityPersister> persisterMap = sessionFactory.getEntityPersisters();
//Map<String, EntityPersister> persisterMap = sessionFactory.getMetamodel().entityPersisters();
for(Map.Entry<String,EntityPersister> entity : persisterMap.entrySet()){
Class targetClass = entity.getValue().getMappedClass();
SingleTableEntityPersister persister = (SingleTableEntityPersister)entity.getValue();
Iterable<AttributeDefinition> attributes = persister.getAttributes();
String entityName = targetClass.getSimpleName();//Entity的名稱
String tableName = persister.getTableName();//Entity對應的表的英文名
System.out.println("類名:" + entityName + " => 表名:" + tableName);
//屬性
for(AttributeDefinition attr : attributes){
String propertyName = attr.getName(); //在entity中的屬性名稱
String[] columnName = persister.getPropertyColumnNames(propertyName); //對應數據庫表中的字段名
String type = "";
PropertyDescriptor targetPd = BeanUtils.getPropertyDescriptor(targetClass, propertyName);
if(targetPd != null){
type = targetPd.getPropertyType().getSimpleName();
}
System.out.println("屬性名:" + propertyName + " => 類型:" + type + " => 數據庫字段名:" + columnName[0]);
}
}