天天看點

[Java web]-- hibernate3映射關聯關系舉例

1、【1:1共享主鍵】關聯關系的搭建:
 1.在庫表間搭建:(外鍵)
    create table t_person35(
id  number(5) primary key,
name varchar2(20),
age number(3)
);
create table t_passport35(
id number(5) primary key references t_person35(id),
expire number(2),
note varchar2(20)
);
 2.在實體間搭建:(關系屬性)
    
  *映射1:1【共享主鍵】關聯關系:
<!-- 1:1共享主鍵  -->
<class name="Person" table="t_person35">
<id name="id" column="id" type="java.lang.Integer">
<generator class="increment"></generator>
</id>
<property name="name" column="name" type="java.lang.String"></property>
<property name="age" column="age" type="java.lang.Integer"></property>
 
<one-to-one name="passport" class="Passport" cascade="save-update"></one-to-one>
</class>
 
<class name="Passport" table="t_passport35">
<id name="id" column="id" type="java.lang.Integer">
 
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<property name="note"  type="java.lang.String"></property>
<property name="expire"  type="java.lang.Integer"></property>
 
<one-to-one name="person" class="Person" cascade="save-update" constrained="true">
</one-to-one>
</class>
 
 
 
 
 
 
 
2.【1:1唯一外鍵】關聯關系映射
    *搭建關聯關系
create table t_student35(
 id  number(5) primary key,
  name  varchar2(20),
  age number(3)
);
create table t_computer35(
  id  number(5) primary key ,
  brand  varchar2(20),
  price  number(4),
 s_id number(5) references t_student35(id)  unique
);
 
   *映射關聯關系
<!-- Student -->
<class name="Student" table="t_student35">
<id name="id" column="id" type="java.lang.Integer">
 
<generator class="increment"></generator>
</id>
<property name="name" type="java.lang.String"></property>
<property name="age" type="java.lang.Integer"></property>
<!-- 關系屬性:computer
 *注意 one-to-one 标簽的預設行為,雙方的主鍵相連
 *通過property-ref="" 更改此預設行為,指定雙方的連接配接的列
 如下的配置【class="Computer" property-ref="student"】是在:
   指定目前方:Student,應該連接配接對方:Computer 的student屬性(對應的列 )
 -->
<one-to-one class="Computer"property-ref="student"name="computer"cascade="save-update">
</one-to-one>
</class>
 
<class name="Computer" table="t_computer35">
<id name="id" column="id" type="java.lang.Integer">
<generator class="increment"></generator>
</id>
<property name="brand" type="java.lang.String"></property>
<property name="price" type="java.lang.Integer"></property>
<many-to-one unique="true" name="student" class="Student" 
column="s_id" cascade="save-update">
   </many-to-one>
</class>
 
 
 
3、【1:*】
create table
id number(5) primary key,
name varchar2(20),
age number(3)
);
create table
id number(5) primary key,
price number(4),
note varchar2(20),
user_id number(5) references
);
 
 
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping package="com.c35.one2many">
<!-- 1:* -->
<!-- User -->
<class name="User" table="t_user35">
<id name="id" column="id" type="java.lang.Integer">
<!-- id生成器(生成政策),保證在插入資料時id唯一 
     increment:遞增政策
-->
<generator class="increment"></generator>
</id>
<property name="name" type="java.lang.String"></property>
<property name="age" type="java.lang.Integer"></property>
<!-- 關系屬性: orders
1.關系屬性名
2.關系對方
3.關系中的外鍵
4.級聯
*inverse="true"==>告知主表不用維護外鍵,防止在主表級聯插入從表時重複維護外鍵。
-->
<set name="orders" cascade="save-update,delete" inverse="true">
<!-- 映射關系中的外鍵的 -->
<key column="user_id"></key>
<one-to-many class="Order"/>
</set>
</class>
<!-- Order -->
<class name="Order" table="t_order35">
<id name="id" column="id" type="java.lang.Integer">
<!-- id生成器(生成政策),保證在插入資料時id唯一 
     increment:遞增政策
-->
<generator class="increment"></generator>
</id>
<property name="note" type="java.lang.String"></property>
<property name="price" type="java.lang.Integer"></property>
<!-- 關系屬性: user
1.關系屬性名
2.關系對方
3.關系中的外鍵
4.級聯
-->
<many-to-one name="user" class="User" column="user_id" cascade="save-update"></many-to-one>
</class>
</hibernate-mapping>
 
【*:*】
建表語句: 
 
create table
number(10) not null,
name varchar2(255 char),
age number(12),
primary key
    )
create table
number(10) not null,
name varchar2(255 char),
number(10),
primary key
    )
 
create table
number(10) references
number(10)  references
primary key
    )
    
映射:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.c35.many2many">
<class name="Student" table="t_student36">
<id name="id" column="id" type="java.lang.Integer">
<generator class="increment">
</generator>
</id>
<property name="name" column="name" type="java.lang.String"></property>
<property name="age"  column="age" type="java.lang.Integer"></property>
<set name="courses" cascade="save-update,delete" table="relation_s_c">
<key column="student_id"></key>
<many-to-many class="Course" column="course_id" ></many-to-many>
</set>
</class>
 
 
<class name="Course" table="t_course36">
<id name="id" column="id" type="java.lang.Integer">
<generator class="increment">
</generator>
</id>
<property name="name" type="java.lang.String"></property>
<property name="ctime" type="java.lang.Integer"></property>
<set name="students" table="relation_s_c"
cascade="save-update" inverse="true">
<key column="course_id" ></key>
<many-to-many class="Student" column="student_id"></many-to-many>
</set>
</class>
</hibernate-mapping>