Java Hibernate深层嵌套集合限制不起作用
我有一个相当大和混乱的问卷数据结构,这导致了一个很长的HQLJava Hibernate深层嵌套集合限制不起作用,java,hibernate,jpa,hql,Java,Hibernate,Jpa,Hql,我有一个相当大和混乱的问卷数据结构,这导致了一个很长的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 nam
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=?
…即使它相当大
但出于某种原因,它完全忽略了答案
限制。
在检查调试器时,我可以看到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
所以我完全迷路了在检查调试器时,我可以看到4个不同会话的4个不同答案,这有什么问题?预期结果是什么?因为我正在检查
其中a.session.id=:id2
,所以我假设返回的所有答案都设置了相同的会话。在这种情况下,我只希望得到一个答案