Hibernate глубокое ограничение вложенной коллекции не работает - PullRequest
0 голосов
/ 04 сентября 2018

У меня довольно большая и запутанная структура данных вопросника, в результате чего длинный HQL

select s from Session s join s.questionnaire q join q.categories c join c.questions q2 join q2.answers a where a.session.id=:id2 and s.id=:id

Я думаю, что этот HQL выглядит разумно, и в результате SQL *

select session0_.id as id1_9_, session0_.name as name2_9_, session0_.position as position3_9_, session0_.questionnaire as question4_9_ from session session0_ inner join questionnaire questionna1_ on session0_.questionnaire=questionna1_.id inner join category categories2_ on questionna1_.id=categories2_.parent_questionnaire inner join question questions3_ on categories2_.id=questions3_.parent_category inner join answer answers4_ on questions3_.id=answers4_.question where answers4_.session=? and session0_.id=?

... даже если он довольно большой

Но по какой-то причине он полностью игнорирует ограничение answer. При проверке в отладчике я вижу 4 разных ответа для 4 разных сессий. Как это возможно?

Редактировать

ОК, это действительно интересно ...

select s from Session s join s.questionnaire q join q.categories c where c.name=:name and s.id=:id

это также не работает, и категории не фильтруются, поэтому я предполагаю, что сопоставление между сеансом и вопросником неверно?

@Entity
@Table(name = "session")
@Cacheable
@org.hibernate.annotations.Cache(region = "session", usage = CacheConcurrencyStrategy.READ_WRITE)
public class Session implements Serializable {
    @Id
    @Column(name = "id")
    private String id;
    @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
    @JoinColumn(name = "questionnaire")
    @LazyCollection(LazyCollectionOption.FALSE)
    private Questionnaire questionnaire;
}

@Entity
@Table(name = "questionnaire")
@Cacheable
@org.hibernate.annotations.Cache(region = "questionnaire", usage = CacheConcurrencyStrategy.READ_WRITE)
public class Questionnaire implements Serializable {
    @Id
    @Column(name = "id")
    private String id;
}

... переход на это не работает

select q from Questionnaire q join q.categories c where c.name=:name

так что я полностью потерялся

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...