Переход в спящий режим: @wherejointable для фильтрации вложенной таблицы

#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.