举个例子说明什么是组成关系,Person类和Hand类。当Person消失后,Hand自然就没有意义了,也应该随之消失。换句话说,组成关系就是[部分类]对象生命周期依赖于[整体类]对象的生命周期,当[整体类]消失时,[部分类]也随即消失。这种关系也叫聚集关系。
地址类:不需要映射文件
package com.xxc.domain;
public class Address {
private String province;// 省
private String city;// 市
private String street;// 街
private String zipCode;// 邮编
private Customer customer;//如果在地址类中也可以导航到客户类,那么在地址类中需要加客户类属性
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
}
客户类:
package com.xxc.domain;
import java.sql.Date;
/**
* 客户类
*/
public class Customer {
private Integer id;
private String fname;
private String lname;
private Integer age;
private Date birthday;
private boolean married;
private byte[] photo;
private String description;
private Address comp_address;//公司地址类
private Address home_address;//家庭地址类
public Address getComp_address() {
return comp_address;
}
public void setComp_address(Address comp_address) {
this.comp_address = comp_address;
}
public Address getHome_address() {
return home_address;
}
public void setHome_address(Address home_address) {
this.home_address = home_address;
}
private String getName() {
if ((fname != null && !fname.equals(""))
&& (lname != null && !lname.equals(""))) {
return fname + "," + lname;
}
return null;
}
private void setName(String name) {
if (name != null && !name.equals("")) {
String[] ss = name.split(",");
if (ss != null && ss.length > 1) {
this.fname = ss[0];
this.lname = ss[1];
}
}
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public boolean isMarried() {
return married;
}
public void setMarried(boolean married) {
this.married = married;
}
public byte[] getPhoto() {
return photo;
}
public void setPhoto(byte[] photo) {
this.photo = photo;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
}
客户类映射文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.xxc.domain.Customer" table="Customers" lazy="false">
<id name="id" column="id" type="integer">
<generator class="native"></generator>
</id>
<property name="name" column="name" type="string" length="20" access="property"/>
<property name="birthday" column="birthday" type="date"/>
<property name="age" column="age" type="integer" length="20"/>
<property name="description" column="description" type="text" />
<property name="married">
<column name="married" sql-type="int(20)"></column>
</property>
<property name="photo">
<!-- property表的column属性和子元素column是互斥的,只能用其一 -->
<column name="photo" sql-type="longblob"></column>
</property>
<!-- 映射组成关系 -->
<component name="comp_address" class="com.xxc.domain.Address">
<parent name="customer"/><!-- 在地址类中需要导航到客户类,就需要在这里配置 必须出现在第一个 -->
<property name="city" column="com_city" type="string"></property>
<property name="province" column="com_province" type="string"></property>
<property name="street" column="com_street" type="string"></property>
<property name="zipCode" column="com_zipCode" type="string"></property>
</component>
<!-- 映射组成关系 -->
<component name="home_address" class="com.xxc.domain.Address">
<parent name="customer"/><!-- 必须出现在第一个 -->
<property name="city" column="home_city" type="string"></property>
<property name="province" column="home_province" type="string"></property>
<property name="street" column="home_street" type="string"></property>
<property name="zipCode" column="home_zipCode" type="string"></property>
</component>
</class>
</hibernate-mapping>