0

私はHibernateにひどく慣れていません。私は2時間グーグルで検索しましたが、基準だけで、HQLを使用せずにJOINを作成する方法をまだ理解できません。Clients(cID, name) と Visits(vID, vcID, date) というテーブルがあります。関係は 1 対多です (1 人のクライアントが複数回訪問できます)。また、setFetchMode なしでやりたいと思います。ただの基準。マッピング xml を変更する必要がありますか?

更新: これは私のマッピング xml の一部です:

 <class name="Client" table="Clients">
   <id name="cID" column="cID"><generator class="native"/></id>
   <property name="name"     length="10" not-null="true"/>
 </class>
 <class name="Visit" table="Visits">
   <id name="vID" column="vID"><generator class="native"/></id>
   <property name="vcID"     length="10" not-null="true"/>
   <property name="date" length="25" not-null="true"/>
 </class>
4

2 に答える 2

1

マッピングを更新する必要があります:

 <class name="Client" table="Clients">
   <id name="cID" column="cID"><generator class="native"/></id>
   <property name="name"     length="10" not-null="true"/>
   <!-- Declare Set<Visit> visits in the Client class-->
   <set name="visits" lazy="false" cascade="all">
        <key column="vcID"/>
        <one-to-many class="your.package.Visit"/>
    </set>
 </class>
 <class name="Visit" table="Visits">
   <id name="vID" column="vID"><generator class="native"/></id>
   <!-- and add "Client client" property to your Visit class --> 
   <many-to-one name="client" column="vcID" lazy="false"/> 
   <property name="date" length="25" not-null="true"/>
 </class>

それで:

 Criteria criteria = session.createCriteria(Visit.class).addCriteria("client")
                      .add(Restriction.eq(...));

また

Criteria criteria = session.createCriteria(Client.class).addCriteria("visits")
                      .add(Restriction.eq(...));

Hibernate はそれらを自動的に結合します。

于 2012-04-09T19:45:58.933 に答える