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]);
    }
 
}
发布了48 篇原创文章 · 获赞 26 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_38316721/article/details/103236778