2

在这种情况下,是否有可能让 hibernate 为某些“正确”的价值做“正确的事情”?

from ClassA a, ClassB b
where a.prop = b.prop

问题是 prop 是一个在连接表中具有不同表示形式的 UserType。在表 A 中,它表示为整数,在表 B 中,它表示为 char。因此 eq 测试转换为查看 1 == 'a' 或多或少,这是错误的,但由 1 或 'a' 表示的对象应该是相同的,因此它们应该比较为真。

4

3 回答 3

2

我认为您可以使用<formula>映射文件中关系上的标签来执行此操作。

例如:

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

我用它来关联两个表,其中一个使用整数,但将其关联到另一个表中的 char 字段。这可能不是您正在寻找的东西,但也许它会让您走上正确的轨道。

于 2008-10-23T19:56:10.247 回答
0

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

于 2008-10-09T17:41:28.573 回答
-1

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

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

public boolean equals(Object x, Object y) throws HibernateException {
    boolean retValue = false;
    if (x == y) retValue = true;

    if (x!=null && y!=null){
        Character xChar = new Character(x);
        Character yChar = new Character(y);
        if (xChar.equals(ychar)){
            retValue = true;
        }
    }

    return retValue;
}
于 2008-10-08T15:40:04.777 回答