Я уже использую предложение @where для фильтрации мягко удаленных строк для объекта. (с флагом «удален»). Это работает очень хорошо.
Теперь мне нужно отфильтровать связанную таблицу, в которой хранится история связанного элемента.
Стратегия истории состоит в том, чтобы просто использовать строку максимального идентификатора связанной таблицы.
Вот что у меня сейчас:
@Where(clause="deleted = 0" )
EntityA{
@Column(name = "id")
Integer id;
@Column(name = "deleted")
Integer deleted;
@OneToMany(mappedBy = "a")
List<EntityB> subEntities;
EntityB getCurrentEntityB(){
.. loop in java that return the B with the max(id).
}
}
EntityB{
@Column(name = "id")
Integer id;
@JoinColumn(name = "A_ID")
EntityA a;
}
Я думаю, что я мог бы упростить это с помощью аннотации @WhereJoinTable, но я немного потерян с возможностями.
Я пробовал что-то вроде этого:
@Where(clause="deleted = 0" )
EntityA{
...
@OneToOne(mappedBy = "a")
@WhereJoinTable(clause = "id in( select max(id) from entityB where a_id = :id )")
EntityB currentEntityB;
}
но синтаксис неправильный, и я не знаю, как это сделать ...
Не так просто найти обширную документацию по этой функции в Интернете ...
Любая помощь?
J.