Java Hibernate和Playframework 1.2.4:查询成员集合大小时的奇怪行为

Java Hibernate和Playframework 1.2.4:查询成员集合大小时的奇怪行为,java,hibernate,jpa,playframework,playframework-1.x,Java,Hibernate,Jpa,Playframework,Playframework 1.x,我有三节课 班级入学考试: @Entity public class EntranceExam extends GenericModel implements Comparable<EntranceExam> { @OneToMany(cascade = CascadeType.REMOVE, mappedBy = "entranceExam") public List<Examination> examinations; } 它返回考试中的试题数量,而

我有三节课

班级入学考试:

@Entity
public class EntranceExam extends GenericModel implements Comparable<EntranceExam> {
    @OneToMany(cascade = CascadeType.REMOVE, mappedBy = "entranceExam")
    public List<Examination> examinations;
}
它返回考试中的试题数量,而不是考试数量。 如果我简化,MySQL日志中的匹配查询如下所示:

select examinations0_.entranceExam_id as entranceExam4_108_3_,
     examinations0_.id as id3_
from Examination examinations0_
     left outer join Question question1_
     on examinations0_.id=question1_.examination_id
     left outer join Question question2_
     on question1_.PARENT_ID=question2_.questionId
where epreuves0_.entranceExam_id=4;

我的Java代码中的问题在哪里?

您可能需要将
入学考试。考试
打包到
哈希集
,默认情况下,hibernate为每个子级创建一个父对象

Set检查=新哈希集(enterceam.examions)

另一种方法是制定独特的战略
criteria.setResultTransformer(criteria.DISTINCT\u ROOT\u实体)

你是在写
入学考试.考试.尺寸()
还是
入学考试.考试.尺寸()
?请注意小写/大写。如果您想要所有的考试,您需要使用类似于
examing.findAll().size()
。我不想要所有的考试,只想要那些与使用
enterceam.findById(id)
检索的enterceam实例相关联的考试。
@Entity
public class Question extends GenericModel implements Serializable,
        Comparable<Question> {
    @ManyToOne
    public Examination examination;

    @Sort(type = SortType.NATURAL)
    @OneToMany(fetch = FetchType.EAGER, mappedBy = "parentQuestion", cascade = { CascadeType.ALL })
    public Set<Question> childQuestions;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "PARENT_ID", nullable = true)
    public Question parentQuestion;

}
EntranceExam entranceExam = EntranceExam.findById(id);
System.out.println(entranceExam.examinations.size());
select examinations0_.entranceExam_id as entranceExam4_108_3_,
     examinations0_.id as id3_
from Examination examinations0_
     left outer join Question question1_
     on examinations0_.id=question1_.examination_id
     left outer join Question question2_
     on question1_.PARENT_ID=question2_.questionId
where epreuves0_.entranceExam_id=4;