代码之家  ›  专栏  ›  技术社区  ›  John Nilsson

Hibernate中的UserType连接

  •  2
  • John Nilsson  · 技术社区  · 17 年前

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

    问题是prop是一个用户类型,在联接表中有不同的表示。在表A中,它表示为整数,在表B中,它表示为字符。因此,eq测试转换为查看1是否或多或少地等于“a”,这是错误的,但1或“a”表示的对象应该相同,因此它们应该比较为真。

    3 回复  |  直到 17 年前
        1
  •  2
  •   Ian McLaird    17 年前

    我想你可以用 <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字段。这也许不是你想要的,但也许会让你走上正轨。

        2
  •  0
  •   No AI now No AI ever    17 年前

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

        3
  •  -1
  •   Vineet Bhatia    17 年前

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