SQL:
create table CUSTOMERS (
ID bigint not null,
NAME varchar(15),
HOME_PROVINCE varchar(255),
HOME_CITY varchar(255),
HOME_STREET varchar(255),
HOME_ZIPCODE varchar(255),
COM_PROVINCE varchar(255),
COM_CITY varchar(255),
COM_STREET varchar(255),
COM_ZIPCODE varchar(255),
primary key (ID));
Customer类中可把地址信息抽象出单独的Address类,来提高程序代码的可重用性。
Customer.java:
package mypack;
public class Customer implements java.io.Serializable {
private long id;
private String name;
private Address homeAddress;
private Address comAddress;
constructor()...; getter()...; setter()...;
}
Address.java:
package mypack;
public class Address implements java.io.Serializable {
private String province;
private String city;
private String street;
private String zipcode;
private Customer customer;
constructor()...; getter()...; setter()...;
}
Customer.hbm.xml:
<class name="mypack.Customer" table="CUSTOMERS">
<id name="id" type="long" column="ID">
<generator class="increment" />
</id>
<property name="name" type="string">
<column name="NAME" length="15" />
</property>
<component name="homeAddress" class="mypack.Address">
<parent name="customer" />
<property name="province" type="string" column="HOME_PROVINCE" />
<property name="city" type="string" column="HOME_CITY" />
<property name="street" type="string" column="HOME_STREET" />
<property name="zipcode" type="string" column="HOME_ZIPCODE" />
</component>
<component name="comAddress" class="mypack.Address">
<parent name="customer" />
<property name="province" type="string" column="COM_PROVINCE" />
<property name="city" type="string" column="COM_CITY" />
<property name="street" type="string" column="COM_STREET" />
<property name="zipcode" type="string" column="COM_ZIPCODE" />
</component>
</class>
此时,Address类属于值类型,没有OID,不能单独进行持久化。Customer属于实体类型,可单独持久化。
在<component>元素中还能嵌套<component>元素,用来映射复合组成关系。