UserType присоединиться к Hibernate - PullRequest
2 голосов
/ 08 октября 2008

Можно ли заставить hibernate делать "правильные вещи" для некоторого значения "right" в этой ситуации?

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

Дело в том, что prop - это UserType с различным представлением в соединенных таблицах. В таблице A он представлен как целое число, а в таблице B - как символ. Таким образом, eq test переводит, чтобы увидеть, является ли 1 == 'a' более или менее, что неверно, но объект, представленный 1 или 'a', должен совпадать, поэтому они должны сравнивать true.

Ответы [ 3 ]

2 голосов
/ 23 октября 2008

Я думаю, что вы можете сделать это, используя тег <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 в другой таблице. Это может быть не совсем то, что вы ищете, но, возможно, это поставит вас на правильный путь.

0 голосов
/ 09 октября 2008

Выполните объединение, используя выражение SQL. Таким образом, вы можете явно выполнять преобразование типов в самом запросе.

0 голосов
/ 08 октября 2008

(1) Измените тип данных столбцов, которые отображаются на «prop», чтобы они были одинаковыми. Это потребует «сделать администратора базы данных вашим другом», но приведет к постоянному использованию UserType «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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...