【问题标题】:How Do I Retrieve The Class Name From Hibernate?如何从 Hibernate 中检索类名?
【发布时间】:2010-11-17 00:48:36
【问题描述】:

如果已经有一个问题可以解决这个问题,那么我找不到链接。

我正在寻找存储在我的 Hibernate 数据库中的对象的存储类名。当我从外部查看数据库时,我看到存储的具有类名的字符串。如何在不构造对象的情况下检索类名?

提前谢谢你。

编辑:不,我没有具体指定鉴别器;这些实际上是存储的子类。我只是想获取对象的实际子类。

【问题讨论】:

  • 据我所知,Hibernate 不会将他的类名存储在数据库中,对吧?它从 xml 配置文件或带注释的类中获取映射。
  • 确实如此。我打开了 pgAdmin,我可以在其中一个数据库列中看到类名的相似之处。这不是确切的类名,但足以满足我的目的。
  • 我能想到的在数据库中看到类名的唯一方法是,如果您使用的是子类并且没有明确定义鉴别器值。在这种情况下,Hibernate 将使用类名作为鉴别器。我建议您详细说明您要完成的工作。
  • 是的,这正是正在发生的事情,我没有明确定义鉴别器值。

标签: hibernate classname


【解决方案1】:

有多种方法,具体取决于您的实例如何映射到数据库格式。在这两种情况下,第一步都是获取包含映射配置的 Configuration Hibernate 实例(参见 the API docs)。

根对象是Configuration,你寻找的信息可能是getTableMappings()返回的。您必须使用调试器和 Hibernate 源代码以及一些时间来弄清楚一切是如何工作的。

如果您使用的是 Spring,则必须想办法获取 Configuration 对象。最好的办法是在Configuration.buildSessionFactory() 中设置断点。这应该会给你一个想法。

【讨论】:

  • stackoverflow.com/questions/516906 - 该答案向您展示了如何遍历所有映射。 PersistentClass.getTable 将为您提供表名,因此如果您从表开始,您应该能够遍历所有类映射,直到找到您想要的。子类可能会混淆问题,因为一个表可以映射到多个类。
  • @Brian:你应该把这个作为答案发布:)
【解决方案2】:

我在存储其类型的对象中创建了一个新字段。这是我用于我的解决方案的内容,但是我仍然想要关于如何访问鉴别器值的答案。

【讨论】:

    猜你喜欢
    • 2014-04-17
    • 1970-01-01
    • 2010-12-15
    • 2013-06-27
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多