У меня довольно большая и запутанная структура данных вопросника, в результате чего длинный 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
так что я полностью потерялся