0

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();

このクエリは、25 歳の 10 人の従業員を返し、ログに表示される 100 を超える選択を実行します。

fetch="select" を fetch="join" に変更しようとしましたが、デカルト効果があり、クエリは同じ従業員をたくさん返します。ログ ファイルに表示されるデータベースへのクエリが 1 つあるにもかかわらず、これも間違った解決策..

Hibernate ができるだけ少ないデータベース選択を使用して会議コレクションを取得できるように変更する方法はありますが、それでも 10 人の従業員を返しますか?

4

1 に答える 1