0

我对休眠非常陌生。我已经用谷歌搜索了两个小时,但我仍然不知道如何在不使用 HQL 的情况下进行 JOIN,仅按标准。我有表 Clients(cID, name) 和 Visits(vID, vcID, date)。关系是一对多的(一个客户可以多次访问)。我也想在没有 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

3

拥有一个具有列表属性“访问”的类 Client 映射到您的访问实体:

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

这将在您的客户表和您的访问表之间创建一个内部连接。

更新:

在这里你会找到一些很好的例子:http ://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html#querycriteria-associations

映射示例

我几乎从不使用休眠映射 xml,但它应该类似于:

   <class name="Client" table="Clients">
      <id name="cID" column="cID"><generator class="native"/></id>
      <property name="name"     length="10" not-null="true"/>

      <bag name="visits">
           <key column="vcId"/>
           <one-to-many class="Visit"/>
      </bag>
    </class>

告诉 Hibernate,有一个属性“visits”表示一对多关系。

于 2012-04-09T18:46:26.527 回答
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 回答