Hibernate: @wherejointable для фильтрации subtable - PullRequest
4 голосов
/ 20 мая 2011

Я уже использую предложение @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.

...