Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate深层嵌套集合限制不起作用_Java_Hibernate_Jpa_Hql - Fatal编程技术网

Java Hibernate深层嵌套集合限制不起作用

Java 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

我有一个相当大和混乱的问卷数据结构,这导致了一个很长的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=?
…即使它相当大

但出于某种原因,它完全忽略了
答案
限制。 在检查调试器时,我可以看到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
,所以我假设返回的所有答案都设置了相同的会话。在这种情况下,我只希望得到一个答案