Как можно добавить критерии сопоставления в JPA Mapped Entities со связями один-ко-многим? - PullRequest
0 голосов
/ 20 ноября 2018

Учитывая ситуацию: база данных была создана, когда Hibernate еще не родился, мы говорим об истинном наследии здесь. У меня есть таблицы, которые никогда не удаляли записи, просто установив флаг active в строке, чтобы пометить запись как используемую в данный момент. Запросы обычно выглядят так:

SELECT * from A left join B on A.id = B.a_id and B.active = 1

С объектами A и B, определенными в Java, и A имеет свойство

@OneToMany
private Set<B> b; 

Как аннотировать свойство, чтобы добавить критерии "и B.active = 1"?

JPA-решение предпочтительнее, но при необходимости мы можем использовать и спящие аннотации.

Аналогичным образом, у нас есть случаи, когда записи имеют активный диапазон дат, поэтому мы должны добавить критерии, аналогичные

"and B.active_From >= now() and (B.active_to is null or B.active_to < now())"

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете использовать аннотацию @Where Hibernate для фильтрации элементов из ассоциации. Вы можете найти пример и объяснение в этом Hibernate Tip .

Вот его короткая версия:

Вы можете установить фрагмент кода SQL в качестве значения атрибута clause аннотации @Where. Итак, ваше отображение должно выглядеть так:

@OneToMany
@Where(clause = "active = 1")
private Set<B> b; 

И вы можете использовать тот же подход, чтобы исключить те, которые не в пределах временного диапазона

@OneToMany
@Where(clause = "active_from >= now() and (active_to is null or active_to < now())")
private Set<B> b; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...