Можно ли адаптировать запрос, который выполняет Hibernate при извлечении ассоциаций для данного объекта?Более конкретно, я хотел бы добавить дополнительное условие к предложению соединения, чтобы устранить недостатки дизайна в устаревшей базе данных, с которой я работаю.
Проблема, с которой я сталкиваюсь, ниже.Первичный ключ для таблицы b состоит из 2 полей: категории id
и value_id
.Однако в таблице A хранится только value_id
, и предполагается, что идентификатор категории жестко задан:
@Entity
@Table(name = "table_a")
public class A {
@ManyToOne
@JoinColumn(name = "b_id")
private B b;
}
@Entity
@Table(name = "table_b")
public class B {
@Id
private int id;
}
При запросе экземпляров A hibernate генерирует следующеепредложение join:
SELECT *
FROM table_a a LEFT OUTER JOIN table_b b
ON a_.b_id = b_.value_id
В то время как они запрашивают, я должен выполнить его:
SELECT *
FROM table_a a LEFT OUTER JOIN table_b b
ON a_.b_id = b_.value_id
AND b.category_id = 2
Я знаю, что могу использовать представление для решения этой проблемы, однако для этого потребуетсясоздать около 70 просмотров, которых я хотел бы избежать, если это возможно.