Hibernate的学习总结(映射类之间的组合关系)

    技术2024-11-07  2

    能一张数据库表中包含了许多的字段:姓字段,名字段,电话字段,邮箱字段。其中可以看出来,姓字段和名字段可以细划分为姓名类别,电话和邮箱可以细划分为联系方式类别。而将此表映射到实体对象时,就可以分为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>

     

     

     

    最新回复(0)