2

この状況で、休止状態に「正しい」値に対して「正しいこと」をさせることは可能ですか?

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

問題は、prop が、結合されたテーブルで異なる表現を持つ UserType であることです。表 A では整数として表され、表 B では char として表されます。したがって、eq テストは、1 == 'a' が多いか少ないかを確認するために変換されますが、これは false ですが、1 または 'a' で表されるオブジェクトは同じである必要があるため、true と比較する必要があります。

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>

これを使用して、一方が整数を使用していた 2 つのテーブルを関連付けましたが、それを別のテーブルの char フィールドに関連付けました。これはまさにあなたが探しているものではないかもしれませんが、おそらくそれはあなたを正しい軌道に乗せるでしょう.

于 2008-10-23T19:56:10.247 に答える
0

SQL式を使用して結合を実行します。そうすれば、クエリ自体で型変換を明示的に行うことができます。

于 2008-10-09T17:41:28.573 に答える
-1

(1)「prop」にマップする列のデータ型を同じに変更します。これには「DBAを友達にする」必要がありますが、一貫した「適切な」UserTypeの使用になります。

(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 に答える