当前位置: 首页 > 面试题库 >

从EnitityManager获取所有映射的实体

楚嘉玉
2023-03-14
问题内容

我有一段维护代码,应该在某些时间点向某些用户授予选择特权:

grant select on A_DB.A_TABLE to READ_ONLY_USER;

我想对所有表执行此操作。我可以select * from tab在Oracle或show tablesMySQL中使用它来获取完整列表,然后像这样继续前进。

但是由于我已经有了javax.persistence.EntityManager对象,所以我想知道是否还有另一种方法来获取所有映射的实体,经理知道(我正在使用Hibernate进行内部编程)。


问题答案:

我可以通过两种方式获取所有映射的实体及其对应的SQL表(可能还有其他)。

最直接的是,是否可以使用Hibernate Configuration对象:

    for(Iterator it = config.getClassMappings(); it.hasNext();){
        PersistentClass pc = (PersistentClass) it.next();
        System.out.println(pc.getEntityName() + "\t" + pc.getTable().getName());
    }

另外,您可以进行更多的转换,并从SessionFactory中获得相同的信息:

    Map<String, ClassMetadata>  map = (Map<String, ClassMetadata>) sessionFactory.getAllClassMetadata();
    for(String entityName : map.keySet()){
        SessionFactoryImpl sfImpl = (SessionFactoryImpl) sessionFactory;
        String tableName = ((AbstractEntityPersister)sfImpl.getEntityPersister(entityName)).getTableName();
        System.out.println(entityName + "\t" + tableName);
    }


 类似资料:
  • 问题内容: 为了验证我收到的数据,我需要确保该长度不会超过数据库列的长度。现在,所有长度信息都存储在Hibernate映射文件中,是否可以通过编程方式访问此信息? 问题答案: 您可以实现,但这并不容易。您可能想要在启动时执行以下操作,并存储值的静态缓存。有很多特殊情况要处理(继承等),但它应适用于简单的单列映射。我可能遗漏了一些instanceof和null检查。

  • 我有MyEntity类: 在@RestController中有2个@GetMapping方法。第一个: 第二个: 需要提供: 1.@GetMap返回MyEntity类中描述的实体。 2.@GetMap("url")返回实体,就像它的一个字段带有@JsonIgnore一样。 更新: 例如,当我返回我的实体时,客户端将得到: 我想在同一时间使用相同的ENTITY有机会根据URL发送给客户端: 1. 2

  • 我有多个数组映射。 我想从多个地图中获取重复地图键的列表。 例如 除了遍历所有地图键,检查集合是否包含键,如果不将键添加到集合中,我想不出任何更干净的方法。有没有办法通过streams来实现这一点?

  • 问题内容: 使用来获取Cookie 似乎很简单,它似乎将Cookie存储在其他位置。 我做了一些研究,然后从对象中获取了一些Cookie 。但是,其中不包含: 奇怪的是,ios 9中还有一个类负责管理中的cookie ,但是,该类不包含用于检索cookie数据的公共方法: 是否有解决方法来获取Cookie数据? 问题答案: 最后,对于登陆iOS的11。 https://developer.appl

  • 问题内容: 我想知道是否有一种方法可以获取java中某个类的所有私有字段及其类型。 例如,假设我有一堂课 现在,我想获得的所有私有字段(,,类)(如果不知道所有领域前期的名称),并检查它们的类型。 问题答案: 有可能获得与方法的所有字段的。然后,您必须检查每个字段的修饰符以查找私有字段: 请注意,这不会返回继承的字段。 最终,您可以使用Field.getType()方法获得字段的类型。

  • 现在,我想获取类的所有私有字段(、、)(事先不知道所有字段的名称)并检查它们的类型。