微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从对象中获取休眠实体名称

如何解决从对象中获取休眠实体名称

有什么办法可以找出hibernate对象加载的实体名称是什么? 我有一个类映射到 2 个不同的表(有人认为这是个好主意):

class MyEntity {
  <some fields>
}

<hibernate-mapping>
   <class name="MyEntity" table="MyEntity" entity-name="MyEntity">
     ...
   </class>
   <class name="MyEntity" table="MyEntityOld" entity-name="MyEntityOld">
      ...
   </class>
</hibernate-mapping>

获取对应的实例:

res = getSession().createCriteria("MyEntity")
if (res == null) {
  res = getSession().createCriteria("MyEntityOld")
}

return res;

这很好用,问题是我不想重构数百个地方只是为了传递该实体的接收方式。此外,还有很多来自 MyEntity 和 MyEntityOld 的继承子类(例如将真实类映射到其“旧”分身)。 那么有什么方法可以通过对象获取实体名称

PS:object.getClass() 显然不起作用,因为对于这个类有一个真正的“MyEntity”

解决方法

我认为这是解决您问题的好方法。

Hibernate get entity name value

将 MyEntity 作为基类并让 MyEntityNew 和 MyEntityOld 扩展 MyEntity,将允许您根据需要区分这两个对象。

<hibernate-mapping>
   <class name="MyEntityNew" table="MyEntity" entity-name="MyEntityNew">
     ...
   </class>
   <class name="MyEntityOld" table="MyEntityOld" entity-name="MyEntityOld">
      ...
   </class>
</hibernate-mapping>

您可能还需要为 @MappedSuperclass 设置一个 MyEntity 注释。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。