有Customer.java和Order.java两个类,分别代表客户表和定单表
因为有以下需求:
.根据给定的客户,查询该客户的所有订单
.根据给定的订单,查询发出订单的客户
建立一对多双向关联关系。
customer.java的代码如下:
package mypack;
import java.io.Serializable;
import java.util.Set;
import java.util.HashSet;
public class Customer implements Serializable{
private Long id;
private String name;
private Set orders = new HashSet();
//此处省略构造方法,以及id和name属性的访问方法
...
public Set getOrders(){
return orders;
}
public void setOrders(Set orders){
this.orders = orders;
}
}
在定义orders集合属性时,通常把它初始化为集合实现类的一个实例。即:
private Set orders = new HashSet();
Order.java的代码如下:
package mypack;
import java.io.Serializable;
public class Order implements Serializable{
private Long id;
private String orderNumber;
private Customer customer;
//此处省略构造方法,以及id和orderNumber属性的访问方法
public Customer getCustomer(){
return customer;
}
public void setCustomer(Customer customer){
this.customer = customer;
}
}
注意到,在Order.java里有个customer的成员变量,为Customer类型。
建立关联的xml源代码。
Customer.hbm.xml如下:
<hibernate-mapping>
<class name="mypack.Customer" table="CUSTOMER">
<id name="id" type="long" column="ID">
<generator class="increment"/>
</id>
<property name="name" type="string">
<column name="NAME" length="15"/>
</property>
<set name="orders" cascade="save-update">
<key column="CUSTOMER_ID"/>
<one-to-many class="mypack.Order"/>
</set>
</class>
</hibernate-mapping>
使用<set>元素映射orders属性。
<set>元素包括以下属性:
.name:设定待映射的持久化类的属性名,这里为Customer类的orders属性
.cascade:当取值为"save-update",表示级联保存和更新。
<set>元素还包含两个子元素:<key>和<one-to-many>.
<one-to-many>元素设定所关联的持久化类,此处为Order类
<key>元素设定与所关联的持久化类对应的表的外键,此处为ORDERS表的CUSTOMER_ID字段
Order.hbm.xml如下:
<hibernate-mapping>
<class name="mypack.Order" table="ORDERS">
<id name="id" type="long" column="ID">
<generator class="increment"/>
</id>
<property name="orderNumber" type="string">
<column name="ORDER_NUMBER" length="15"/>
</property>
<many-to-one name="customer" column="CUSTOMER_ID"
class="mypack.CUSTOMER"
not-null="true"/>
</class>
</hibernate-mapping>
因为有以下需求:
.根据给定的客户,查询该客户的所有订单
.根据给定的订单,查询发出订单的客户
建立一对多双向关联关系。
customer.java的代码如下:
package mypack;
import java.io.Serializable;
import java.util.Set;
import java.util.HashSet;
public class Customer implements Serializable{
private Long id;
private String name;
private Set orders = new HashSet();
//此处省略构造方法,以及id和name属性的访问方法
...
public Set getOrders(){
return orders;
}
public void setOrders(Set orders){
this.orders = orders;
}
}
在定义orders集合属性时,通常把它初始化为集合实现类的一个实例。即:
private Set orders = new HashSet();
Order.java的代码如下:
package mypack;
import java.io.Serializable;
public class Order implements Serializable{
private Long id;
private String orderNumber;
private Customer customer;
//此处省略构造方法,以及id和orderNumber属性的访问方法
public Customer getCustomer(){
return customer;
}
public void setCustomer(Customer customer){
this.customer = customer;
}
}
注意到,在Order.java里有个customer的成员变量,为Customer类型。
建立关联的xml源代码。
Customer.hbm.xml如下:
<hibernate-mapping>
<class name="mypack.Customer" table="CUSTOMER">
<id name="id" type="long" column="ID">
<generator class="increment"/>
</id>
<property name="name" type="string">
<column name="NAME" length="15"/>
</property>
<set name="orders" cascade="save-update">
<key column="CUSTOMER_ID"/>
<one-to-many class="mypack.Order"/>
</set>
</class>
</hibernate-mapping>
使用<set>元素映射orders属性。
<set>元素包括以下属性:
.name:设定待映射的持久化类的属性名,这里为Customer类的orders属性
.cascade:当取值为"save-update",表示级联保存和更新。
<set>元素还包含两个子元素:<key>和<one-to-many>.
<one-to-many>元素设定所关联的持久化类,此处为Order类
<key>元素设定与所关联的持久化类对应的表的外键,此处为ORDERS表的CUSTOMER_ID字段
Order.hbm.xml如下:
<hibernate-mapping>
<class name="mypack.Order" table="ORDERS">
<id name="id" type="long" column="ID">
<generator class="increment"/>
</id>
<property name="orderNumber" type="string">
<column name="ORDER_NUMBER" length="15"/>
</property>
<many-to-one name="customer" column="CUSTOMER_ID"
class="mypack.CUSTOMER"
not-null="true"/>
</class>
</hibernate-mapping>