Hibernate中的用户类型join

Hibernate中的用户类型join,hibernate,orm,Hibernate,Orm,在这种情况下,有没有可能让hibernate做一些“正确的事情”来获得一些“正确的”值 from ClassA a, ClassB b where a.prop = b.prop 问题是prop是一个用户类型,在连接的表中有不同的表示形式。在表A中表示为整数,在表B中表示为字符。因此,eq测试转换为查看1=='a'是否或多或少,这是错误的,但由1或'a'表示的对象应该相同,因此它们应该比较为真。(1)将映射到“prop”的列的数据类型更改为相同。这需要“让DBA成为您的朋友”,但会导致一致的“

在这种情况下,有没有可能让hibernate做一些“正确的事情”来获得一些“正确的”值

from ClassA a, ClassB b
where a.prop = b.prop
问题是prop是一个用户类型,在连接的表中有不同的表示形式。在表A中表示为整数,在表B中表示为字符。因此,eq测试转换为查看1=='a'是否或多或少,这是错误的,但由1或'a'表示的对象应该相同,因此它们应该比较为真。

(1)将映射到“prop”的列的数据类型更改为相同。这需要“让DBA成为您的朋友”,但会导致一致的“prop”用户类型使用

(2) 在equals()方法中处理类型差异


使用SQL表达式进行连接。这样,您就可以在查询本身中显式地进行类型转换。

我认为您可以使用映射文件中关系上的
标记来进行转换

例如:

<many-to-one name="myClassB" class="ClassB">
  <formula>--Some SQL Expression that converts between ClassA.prop and ClassB.prop</formula>
</many-to-one>

--某些在ClassA.prop和ClassB.prop之间转换的SQL表达式

我用它来关联两个表,其中一个表使用整数,但将它关联到另一个表中的字符字段。这可能不是您想要的,但可能会让您走上正确的道路。

1不是一个选项,因为它是使用相同数据库的旧系统的问题。2.不会转换为sql。
<many-to-one name="myClassB" class="ClassB">
  <formula>--Some SQL Expression that converts between ClassA.prop and ClassB.prop</formula>
</many-to-one>