UserType在Hibernate中加入

时间:2008-10-08 14:51:05

标签: hibernate orm

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

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

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

3 个答案:

答案 0 :(得分: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字段相关联。这可能不是您正在寻找的,但也许它会让您走上正确的轨道。

答案 1 :(得分:0)

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

(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;
}

答案 2 :(得分:0)

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