Как стать автором
Поиск
Написать публикацию
Обновить
1
0

Пользователь

Отправить сообщение

Да и он на фетчинг никак не влияет, только на запросы. Полезная штука)

Да тут все плохо, но с этим уже как-то можно жить с hibernate. Мне в проекте по другой причине нужно было добавить дефолтную фильтрацию. Пробовал @Where, @Filter, @Loader. И везде свои дыры и баги.

Для @Fetch(FetchMode.JOIN) @ManyToOne(fetch = FetchType.EAGER) Фильтрация @Where включается, если в join добавлено условие фильтрации @JoinColumnOrFormula по полю, не являющемуся id.

Пример:

модель

@Entity
@Table(name = "post_reference")
public class PostEagerJoinReference {

    @Id
    private Long id;

    @Fetch(FetchMode.JOIN)
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumnOrFormula(column = @JoinColumn(name = "post_id", referencedColumnName = "id"))
    @JoinColumnOrFormula(formula = @JoinFormula(value = "any", referencedColumnName = "title"))
    private Post post;
}

@Entity
@Table(name = "post")
@Where(clause = "deleted = false")
public class Post implements Serializable {

    @Id
    private Long id;

    @Column(name = "title")
    private String title;

    @Column(name = "deleted")
    private boolean deleted = false;
}

на запрос

entityManager.find(PostEagerJoinReference.class, 1L);

генерируется запрос:

select
    posteagerj0_.id as id1_1_0_,
    posteagerj0_.post_id as post_id2_1_0_,
    any as formula2_0_,
    post1_.id as id1_0_1_,
    post1_.deleted as deleted2_0_1_,
    post1_.title as title3_0_1_
from
    post_reference posteagerj0_ 
left outer join
    post post1_ 
        on posteagerj0_.post_id=post1_.id 
        and any=post1_.title 
        and (
            post1_.deleted = false
        )  
where
    posteagerj0_.id=?

В качестве поля не являющимся id можно использовать delete = true, тогда фильтр `deleted = false` на JOIN задвоится.

Кстати еще это приведет вот к такому багу https://hibernate.atlassian.net/browse/HHH-7668, который решается добавлением на сущность implements Serializable.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность