jpa 通過EntityManager獲取 所有實體類 屬性 及其對應的表 字段名

//通過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]);
    }
 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章