能一張數據庫表中包含了許多的字段:姓字段,名字段,電話字段,郵箱字段。其中可以看出來,姓字段和名字段可以細劃分爲姓名類別,電話和郵箱可以細劃分爲聯繫方式類別。而將此表映射到實體對象時,就可以分爲2個實體類,姓名類和聯繫方式類。個人理解這樣可以將表中沒有劃分的共通屬性提煉出來。但有多張表中有聯繫方式和姓名類型字段時,可以用同一個實體類來映射,增加了複用性。
實現該映射方式的爲:
1.建一個person類來映射數據庫中的表
public class Person {
private int id ;
private Name name ; Name類爲姓名的實體類
private Contact contact ; Contact類爲聯繫方式的實體類
public Contact getContact() {
return contact;
}
public void setContact(Contact contact) {
this.contact = contact;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
}
2.各建立Name類和Contact類
public class Name {
private String firstname ;
private String lastname ;
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
}
public class Contact {
private String address ;
private String zipcode ;
private String tel ;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}
3.在hbm配置文件中用component節點
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="org.lxh.hibernate">
<class name="Person" table="PERSON">
<id name="id" column="ID" type="int">
<generator class="assigned" />
</id>
<component name="name" class="org.lxh.hibernate.Name">
<property name="firstname" column="FIRSTNAME" type="string" not-null="true" />
<property name="lastname" column="LASTNAME" type="string" not-null="true" />
</component>
<component name="contact" class="org.lxh.hibernate.Contact">
<property name="address" column="ADDRESS" type="string" not-null="true" />
<property name="zipcode" column="ZIPCODE" type="string" not-null="true" />
<property name="tel" column="TEL" type="string" />
</component>
</class>
</hibernate-mapping>