Java Hibernate复合键,带;“多对一”键;加载性能的关系
我有两个班,学生班和课程班,这两个班成为了三年级的一个组合键Java Hibernate复合键,带;“多对一”键;加载性能的关系,java,hibernate,lazy-loading,hibernate-mapping,many-to-one,Java,Hibernate,Lazy Loading,Hibernate Mapping,Many To One,我有两个班,学生班和课程班,这两个班成为了三年级的一个组合键 <class name="Grade" table="grade" lazy="true"> <composite-id> <key-many-to-one class="Student" name="student" column="student_id" lazy="false" /> <key-many-to-one class="Course"
<class name="Grade" table="grade" lazy="true">
<composite-id>
<key-many-to-one class="Student" name="student" column="student_id" lazy="false" />
<key-many-to-one class="Course" name="course" column="course_id" lazy="false" />
</composite-id>
<property name="score" column="score" type="integer" />
</class>
如果我运行一个分离的条件查询,比如说获取一门课程的所有学生成绩
DetachedCriteria dc = DetachedCriteria.forClass( Grade.class );
dc.add( Property.forName( "course" ).eq( course ) );
dc.setFetchMode( "student", FetchMode.JOIN );
List< Grade > grades = getHibernateTemplate().findByCriteria( dc );
DetachedCriteria dc=DetachedCriteria.forClass(Grade.class);
dc.add(Property.forName(“课程”).eq(课程));
dc.setFetchMode(“学生”,FetchMode.JOIN);
Listgrades=getHibernateTemplate().findByCriteria(dc);
我注意到,在.list()过程中,Student对象是分别为每一行延迟加载的,即使主查询也在加载Student对象。这似乎是一种甚至不考虑批量大小设置的关键处理(我将动态批处理设置为50个批处理项目)。我找到了一份难看的工作
<class name="Grade" table="grade" lazy="true">
<composite-id>
<key-property name="studentId" column="student_id" />
<key-property name="courseId" column="course_id" />
</composite-id>
<many-to-one class="Student" name="student" column="student_id" lazy="false" insert="false" update="false" />
<many-to-one class="Course" name="course" column="course_id" lazy="false" insert="false" update="false" />
<property name="score" column="score" type="integer" />
</class>
以及修改年级类以包含这些ID。有更好的办法吗?我确实希望学生和课程对象可用(延迟加载)。使用hibernate 5.2.6