#hibernate #annotations #where-clause
#переход в спящий режим #аннотации #where-предложение
Вопрос:
Я уже использую предложение @where для фильтрации автоматически удаленных строк для объекта. (с флагом «удалено»). Это работает очень хорошо.
Теперь мне нужно отфильтровать связанную таблицу, в которой хранится история связанного элемента. Стратегия истории заключается просто в использовании строки max id связанной таблицы. Это то, что у меня есть сейчас:
@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.