Надеюсь, кто-нибудь поможет мне найти ответ.
Я работаю с устаревшей базой данных и не могу изменить ни одну из существующих таблиц, потому что другие приложения зависят от них.
У меня есть три основных таблицы: A, B, C .
A имеет столбец со ссылкой на B (отношение многие к одному). Проблема в том, что он должен иметь отношение к C, а не к B. Поэтому я создал отображение * -1 BC.
Tables: A,B,C,BC (all have ID field)
A-B many to one
B-C many to one through BC
Needed:A-C without altering A,B or C
Я не хочу иметь Java-сущности для B или BC, только A и C, и у A должно быть поле A.c
До сих пор я пытался использовать аннотацию @Formula безрезультатно.
class A{
@ManyToOne
@Formula(value="select BC.c from BC where BC.b = b")
private C c;
}
это приводит к следующему SQL:
select this_.c_ID from A this_
Очевидно, что он не работает, поскольку в таблице A нет столбца c_ID (почему формула полностью игнорируется?).
Удаление аннотации @ManyToOne приводит к:
select (select BC.c from BC where BC.b = this_.b) as formula_0 from A this_
Это было бы идеально, за исключением того, что Hibernate ожидает значение BINARY (сериализация класса C?) И выдает исключение при приведении целого числа, которое он получает.
Этого идентификатора должно быть достаточно для отложенной загрузки, но как мне сказать, чтобы он это делал? любое использование @ManyToOne нарушает формулу.
Как получить ссылку A-C без изменения таблиц A, B, C или создания классов Java B или BC?
Спасибо за любую информацию,
Dan