天天看點

hibernate之映射關系一對多(自身關聯)

自身關聯注意的問題:

   1、關聯多的一方必須是隻有一個父類節點,如果存在多個父類節點,那麼就不能采用自身關聯,(字段備援資料太多)

   2、自身關聯可以節省表的設計、

   3、一的一端為父節點,沒有外鍵

   4、多的一端為子節點,并且存在外鍵

   5、關聯一對多自身關聯外鍵key、mary-to-one、指向同一個對象同時也是同一外鍵字段

  代碼配置:

   1、建立表

    create table t_user(

    u_id varchar(255),

    u_name varchar(255),

    u_age integer,

    u_price double(5,2),

    uc_id varchar(255),//外鍵

    primary key(u_id)

    );

   2、java-pojo類

     public class usert  implements serializable{

     private string id;

     public string name;

     private integer age;

     private double price;

     //父類

     private usert usertsup;

     //子類

     private set<usert> userchild = new hashset<usert>();

     public usert(){}

     省略get、set方法

     }

    3、配置檔案

     <?xml version="1.0"?>

      <!doctype hibernate-mapping public

              "-//hibernate/hibernate mapping dtd 3.0//en"

      <hibernate-mapping package="com.wolf.pojo.onetoone" auto-import="false">

          <class name="usert" table="t_user">

          <!-- 多對一:隻有單項    -->

              <id name="id" column="u_id">

              </id>

              <property name="name" column="u_name"/>

              <property name="age" column="u_age"/>

              <property name="price" column="u_price"/>

              <many-to-one name="usertsup" class="usert" column="uc_id" lazy="false" cascade="all"></many-to-one>

           <set name="userchild" table="t_user" cascade="all" >

            <key column="uc_id"></key>

            <one-to-many class="usert"/>

           </set>

          </class>

      </hibernate-mapping>