映射
 1、映射中的自定义类型
________________________________________________________________________________
 2、粒度问题
    面向设计的
      component
package org.binbin;
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;
    }
}
-------------------------------
package org.binbin;

public class Contact {
    private String adress;
    private String zipcode;
    private String tel;

    
    public String getAdress() {
        return adress;
    }

    
    public void setAdress(String adress) {
        this.adress = adress;
    }

    
    public String getZipcode() {
        return zipcode;
    }

    
    public void setZipcode(String zipcode) {
        this.zipcode = zipcode;
    }

    
    public String getTel() {
        return tel;
    }

    
    public void setTel(String tel) {
        this.tel = tel;
    }
}
--------------------------------
package org.binbin;

public class TUser {
    private Integer id;
    private Name name;
    private Contact contact;

    
    public Integer getId() {
        return id;
    }

    
    public void setId(Integer id) {
        this.id = id;
    }

    
    public Name getName() {
        return name;
    }

    
    public void setName(Name name) {
        this.name = name;
    }

    
    public Contact getContact() {
        return contact;
    }

    
    public void setContact(Contact contact) {
        this.contact = contact;
    }
}
-------------------------------------------
TUser.hbm.xml
<?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">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="org.binbin.TUser" table="tuser" >
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="assigned" />
        </id>
    <component name="name"
    class="org.binbin.Name">
      <property name="firstname" type="java.lang.String">
        <column name="firstname" not-null="true"/>
      </property>
      <property name="lastname" type="java.lang.String">
        <column name="lastname" not-null="true"/>
      </property>
    </component>
    <component name="contact">
      <property name="adress" type="java.lang.String">
       <column name="adress" not-null="true"/>
      </property>
      <property name="zipcode" type="java.lang.String">
       <column name="zipcode" not-null="true"/>
      </property>
      <property name="tel" type="java.lang.String">
       <column name="tel" not-null="true"/>
      </property>
    </component>
   </class>
</hibernate-mapping>
面向性能的
      显式多态
public class TUserInfo implements Serializable {
   private Integer id;
   private String name;
   private Integer age;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Integer getAge() {
    return age;
}

public void setAge(Integer age) {
    this.age = age;
}
}
TUserInfo.hbm.xml
<?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>
    <class name="org.binbin.TUserInfo" table="tuser">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" not-null="true" />
        </property>
        <property name="age" type="java.lang.Integer">
            <column name="age" not-null="true" />
        </property>
    </class>
</hibernate-mapping>
_package org.binbin;

import java.sql.Blob;
import java.sql.Clob;

public class TUerProfile extends TUserInfo {
  private Blob image;
  private Clob resume;

public Blob getImage() {
    return image;
}

public void setImage(Blob image) {
    this.image = image;
}

public Clob getResume() {
    return resume;
}

public void setResume(Clob resume) {
    this.resume = resume;
}
}
TUserProfile.hbm.xml
<?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">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class
      name="org.binbin.TUserInfo"
      table="tuser"
      polymorphism="explicit" ><!-- 设定显式多态 -->
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" not-null="true" />
        </property>
        <property name="age" type="java.lang.Integer">
            <column name="age" not-null="true" />
        </property>
        <property name="image" type="java.sql.Blob">
            <column name="image" not-null="true"/>
        </property>
        <property name="resume" type="java.sql.Clob">
            <column name="resume" not-null="true" />
        </property>
    </class>
</hibernate-mapping>
注意class中的polymorphism="explicit" ,只有在明确指明类名时才会被调用
________________________________________________________________________
      joined-subclass
      T_Item表
id            int           <pk>
name          varchar(50)
      T_Book表
id     int           <pk,fk> 外键对应T_Item(主表)的主键
pageCount     int
      T_DVD
id     int           <pk,fk> 外键对应T_Item(主表)的主键
regioncode    varchar(30)
package org.binbin;

public class TItem {
    private Integer id;
    private String name;

    
    public Integer getId() {
        return id;
    }

    
    public void setId(Integer id) {
        this.id = id;
    }

    
    public String getName() {
        return name;
    }

    
    public void setName(String name) {
        this.name = name;
    }
}
package org.binbin;

public class TBook extends TItem {
  private Integer pageCount;

    
    public Integer getPageCount() {
        return pageCount;
    }

    
    public void setPageCount(Integer pageCount) {
        this.pageCount = pageCount;
    }
}
package org.binbin;

public class TDVD extends TItem {
 private String regioncode;

    
    public String getRegioncode() {
        return regioncode;
    }

    
    public void setRegioncode(String regioncode) {
        this.regioncode = regioncode;
    }
}
TItem.hbm.xml 使用时将自动匹配,但开销也大
<?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">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="org.binbin.TItem" table="T_Item">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" not-null="true" />
        </property>
        <joined-subclass name="org.binbin.TDVD" table="T_DVD">
            <key>
                <column name="id"></column>
            </key>
            <property name="regioncode" type="java.lang.String">
                <column name="regioncode"></column>
            </property>
        </joined-subclass>
        <joined-subclass name="org.binbin.TBook" table="T_Book">
            <key>
                <column name="id"></column>
            </key>
            <property name="pageCount" type="java.lang.Integer">
                <column name="pageCount"></column>
            </property>
        </joined-subclass>
    </class>
</hibernate-mapping>
_______________________________________________________________________
      discriminator //增加冗余字段,一个字段决定子类
类文件同joined-subclass
表变为单一表 T_Item
id            int           <pk>
name          varchar(50)
category      varchar(20)
pageCount     int
regioncode    varchar(30)
TItem.hbm.xml
<?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">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="org.binbin.TItem" table="T_Item" >
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" not-null="true" />
        </property>
        <discriminator type="java.lang.String"><!-- 声明 -->
            <column name="categoty" not-null="true"/>
        </discriminator>
        <subclass
          name="org.binbin.TBook"
          discriminator-value="1">
         <property name="pageCount" type="java.lang.Integer">
          <column name="pageCount" not-null="false"/>
         </property>
        </subclass>
        <subclass
          name="org.binbin.TDVD"
          discriminator-value="2">
         <property name="regioncode" type="java.lang.String">
          <column name="regioncode" not-null="false"/>
         </property>
        </subclass>
    </class>
</hibernate-mapping>
根据category 的值匹配子类

 

评论
发表评论

文章已被作者锁定,不允许评论。

malk
搜索本博客
最近加入圈子
最新评论