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;