Hibernate的學習總結(映射類之間的組合關係)

能一張數據庫表中包含了許多的字段:姓字段,名字段,電話字段,郵箱字段。其中可以看出來,姓字段和名字段可以細劃分爲姓名類別,電話和郵箱可以細劃分爲聯繫方式類別。而將此表映射到實體對象時,就可以分爲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>

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章