我正在使用 HIbernate 3、Oracle 和 Java。我有一个 Employee 类和这个映射:
<set name="meetings" table="EMPLOYEE_MEETING" inverse="false" lazy="false" fetch="select" cascade="all" >
<key column="EMPLOYEE_ID" />
<composite-element class="EmployeeMeeting">
<parent name="employee" />
<many-to-one name="meeting" column="MEETING_ID" not-null="true" cascade="all"
class="Meeting" />
<property name="opinion" column="OPINION" />
</composite-element>
</set>
有超过 100 次会议,Hibernate 使用以下选择超过 100 次:
Hibernate: select this_.EMPLOYEE_ID as EMPLOYEE1_0_0_, this_.firstname as firstname0_0_, this_.lastname as lastname0_0_ from EMPLOYEE this_ where this_.EMPLOYEE_ID=?
Hibernate: select meetings0_.EMPLOYEE_ID as EMPLOYEE1_0_, meetings0_.MEETING_ID as MEETING2_0_, meetings0_.OPINION as OPINION0_ from EMPLOYEE_MEETING meetings0_ where meetings0_.EMPLOYEE_ID=?
现在有一个查询
List emps = session.createCriteria(Employee.class)
.add( Restrictions.eq("age", new Long(25)) ).list();
该查询返回 10 名年龄为 25 岁的员工,并执行超过 100 次在日志中可见的选择。
我尝试将 fetch="select" 更改为 fetch="join" 但存在笛卡尔效应,该查询将返回大量相同的员工。尽管在日志文件中可以看到对数据库的一个查询,但这也是错误的解决方案..
如何更改它以便 Hibernate 可以使用尽可能少的数据库选择检索会议集合,但仍返回 10 名员工?