日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate 实体关联关系映射----总结

發布時間:2024/4/17 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate 实体关联关系映射----总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://lavasoft.blog.51cto.com/62575/39398

Hibernate 實體關聯關系映射----總結 花了三天的業余時間,終于寫完了Hibernate關聯關系映射的所有實例,感覺還應該總結一下。 Hibernate映射關系錯綜復雜,在實際中真的都能用到嗎?不用行嗎? 在我看來,Hibernate提供這些映射關系,常用就是一對一和多對一,并且在能不用連接表的時候盡量不要用連接表。多對多會用到,如果用到了,應該首先考慮底層數據庫設計是否合理。 在實際開發中,在Hibernate關聯關系之外常常還有另外一種選擇方案,表各自作為單表映射,業務邏輯控制外鍵關系(有時候就是一個相關聯的列,但不一定要加外鍵約束),這樣更加靈活,并且數據的完整性同樣有保證。 當然,“單表映射,業務控制外鍵關系”并不是說Hibernate的實體關聯功能是多余的,Hibernate的實體關聯的優點很多,隨便拿本書都是講優點,用好了會讓開發人員感覺更方便,現在我也是兩種方案結合使用。比如對于不很確定的兩個實體,常常選用單表關聯。 以前在初學Hibernate還沒有完全搞清楚這些關聯關系的時候,就是用單表映射,業務控制外鍵關系做的,發現沒有任何問題,程序同樣運行得很好。 看了這些是不是后悔浪費時間學習映射關系了?呵呵,Hibernate的OR Mapping是Hibernate的靈魂,我相信Hibernate的創始人比我們一般人的理解更深刻。只有學會了這些才能體會Hibernate設計者的思想。學一個東西,不光自己寫代碼,還應該能看懂別人的代碼才行。因此系統學習這些關聯映射還是大有必要的。 以上都是我自己的觀點。歡迎在此交流討論。 Hibernate在實際項目開發中,hbm.xml包括數據庫腳本都是通過Xdoclet生成的,在此不采用Xdoclet的目的是為了便于理解這些映射模型。實體-數據表-映射文件 三者對比看,太直觀了。 瞌睡了,暫時先寫到此,有新思路了再補上。。。。 ----------------------------------------------------- 回Hibernate:Hibernate關聯關系映射實例速查 Hibernate關聯關系映射目錄

├─單向關聯
│? ├─? 一對一外鍵單向關聯
│? ├─? 一對一主鍵單向關聯
│? ├─? 一對一連接表單向關聯
│? ├─? 一對多外鍵單向關聯
│? ├─? 一對多連接表單向關聯
│? ├─? 多對一外鍵單向關聯
│? ├─? 多對一連接表單向關聯
│? └─? 多對多單向關聯
└─雙向關聯
??? ├─? 一對一外鍵雙向關聯
??? ├─? 一對一主鍵雙向關聯
??? ├─? 一對一連接表雙向關聯
??? ├─? 一對多外鍵雙向關聯
??? ├─? 一對多連接表雙向關聯
??? └─? 多對多雙向關聯

?

Hibernate 一對一外鍵單向關聯 ? ??? 事實上,單向1-1與N-1的實質是相同的,1-1是N-1的特例,單向1-1與N-1的映射配置也非常相似。只需要將原來的many-to-one元素增加unique="true"屬性,用于表示N的一端也必須是唯一的,在N的一端增加了唯一的約束,即成為單向1-1?;谕怄I的單向1-1的配置將與無連接表N-1關聯的many-to-one增加unique="true"屬性即可。 ? 一、模型介紹 ? 一個人(Person)對應一個地址(Address)。 ? 二、實體(省略getter、setter方法) ? public class Person11fk { ??? private int personid; ??? private String name; ??? private int age; ??? private Address11fk address11fk; ? public class Address11fk { ??? private int addressid; ??? private String addressdetail; ? 三、表模型 mysql> desc address_11fk; +---------------+--------------+------+-----+---------+----------------+ | Field???????? | Type???????? | Null | Key | Default | Extra????????? | +---------------+--------------+------+-----+---------+----------------+ | addressid???? | int(11)????? | NO?? | PRI | NULL??? | auto_increment | | addressdetail | varchar(255) | YES? |???? | NULL??? |??????????????? | +---------------+--------------+------+-----+---------+----------------+ ? mysql> desc person_11fk; +-----------+--------------+------+-----+---------+----------------+ | Field???? | Type???????? | Null | Key | Default | Extra????????? | +-----------+--------------+------+-----+---------+----------------+ | personid? | int(11)????? | NO?? | PRI | NULL?? ?| auto_increment | | name????? | varchar(255) | YES? |???? | NULL??? |??????????????? | | age?????? | int(11)????? | YES? |???? | NULL??? |??????????????? | | addressId | int(11)????? | YES? | UNI | NULL??? |??????????????? | +-----------+--------------+------+-----+---------+----------------+ ? 四、生成的SQL腳本 ? CREATE TABLE `address_11fk` (
????`addressid` int(11) NOT NULL auto_increment,
????`addressdetail` varchar(255) default NULL,
????PRIMARY KEY????(`addressid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;
????
CREATE TABLE `person_11fk` (
????`personid` int(11) NOT NULL auto_increment,
????`name` varchar(255) default NULL,
????`age` int(11) default NULL,
????`addressId` int(11) default NULL,
????PRIMARY KEY????(`personid`),
????KEY `FK68A8818F3F45AA77` (`addressId`),
????CONSTRAINT `FK68A8818F3F45AA77` FOREIGN KEY (`addressId`) REFERENCES `address_11fk` (`addressid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;
? ? 五、映射方法: ??? 在Person中添加Address屬性,映射配置為: ??????? <!--用來映射關聯PO column是Address在該表中的外鍵列名,增加unique變成“1-1”--> ??????? <many-to-one name="address11fk" column="addressId" unique="true"/> ? <hibernate-mapping>
????????<class name="com.lavasoft.dx._1_1_fk.Address11fk" table="ADDRESS_11fk">
????????????????<id name="addressid">
????????????????????????<generator class="identity"/>
????????????????</id>
????????????????<property name="addressdetail"/>
????????</class>
</hibernate-mapping> ? <hibernate-mapping>
????????<class name="com.lavasoft.dx._1_1_fk.Person11fk" table="PERSON_11fk">
????????????????<id name="personid">
????????????????????????<generator class="identity"/>
????????????????</id>
????????????????<property name="name"/>
????????????????<property name="age"/>
????????????????<!--用來映射關聯PO column是Address在該表中的外鍵列名,增加unique變成“1-1”-->
????????????????<many-to-one name="address11fk" column="addressId" unique="true"/>
????????</class>
</hibernate-mapping> ??????? ? 六、測試方法 ? public class Test_11fk {
????????public static void main(String[] args){
????????????????Person11fk p1=new Person11fk();
????
????????????????p1.setAge(21);
????????????????p1.setName("p1");
????
????????????????Address11fk add1=new Address11fk();
????????????????add1.setAddressdetail("鄭州市經三路");
????
????????????????p1.setAddress11fk(add1);
????
????????????????Session session= HibernateUtil.getCurrentSession();
????????????????Transaction tx=session.beginTransaction();
????????????????session.save(add1);
????????????????session.save(p1);
????????????????tx.commit();
????????????????HibernateUtil.closeSession();
????????}
} ? ? 七、測試結果 ? 1) :正常保存. 推薦這么干! ??????? session.save(add1); ??????? session.save(p1); ? Hibernate: insert into ADDRESS_11fk (addressdetail) values (?) Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?) ? 2) :正常保存. ??????? session.save(p1); ??????? session.save(add1); ? Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?) Hibernate: insert into ADDRESS_11fk (addressdetail) values (?) Hibernate: update PERSON_11fk set name=?, age=?, addressId=? where personid=? ? 3) :正常保存. //??????? session.save(p1); ??????? session.save(add1); ? Hibernate: insert into ADDRESS_11fk (addressdetail) values (?) ? 4) : 發生異常,不能保存. ??????? session.save(p1); //??????? session.save(add1); ? Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?) Exception in thread "main" org.hibernate.TransientObjectException: com.lavasoft.dx._1_1_fk.Address11fk ===========

Hibernate 一對一主鍵單向關聯

?

1-1的關聯可以基于主鍵關聯,但基于主鍵關聯的持久化類不能擁有自己的主鍵生成策略,它的主鍵由關聯類負責生成。另外,另外,增加one-to-one元素來關聯屬性,必須為one-to-one元素增加constrained="true"屬性,表明該類主鍵由關聯類生成。

???

一、模型介紹

?

一個人(Person)對應一個地址(Address)。

?

二、實體(省略getter、setter方法)

?

public class Person11pk {

??? private int personid;

??? private String name;

??? private int age;

??? private Address11pk address11pk;

?

public class Address11pk {

??? private int addressid;

??? private String addressdetail;

?

三、表模型

?

mysql> desc address_11pk;

+---------------+--------------+------+-----+---------+----------------+

| Field???????? | Type???????? | Null | Key | Default | Extra????????? |

+---------------+--------------+------+-----+---------+----------------+

| addressid???? | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| addressdetail | varchar(255) | YES? |???? | NULL??? |??????????????? |

+---------------+--------------+------+-----+---------+----------------+

?

mysql> desc person_11pk;

+----------+--------------+------+-----+---------+-------+

| Field??? | Type???????? | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+-------+

| personid | int(11)????? | NO?? | PRI |???????? |?????? |

| name? ???| varchar(255) | YES? |???? | NULL??? |?????? |

| age????? | int(11)????? | YES? |???? | NULL??? |?????? |

+----------+--------------+------+-----+---------+-------+

?

四、生成的SQL腳本

?

/* Formatted on 2007/08/22 14:40 (QP5 v5.50) */

CREATE TABLE `address_11pk` (

? `addressid` int(11) NOT NULL auto_increment,

? `addressdetail` varchar(255) default NULL,

? PRIMARY KEY? (`addressid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;

?

?

/* Formatted on 2007/08/22 14:41 (QP5 v5.50) */

CREATE TABLE `person_11pk` (

? `presonid` int(11) NOT NULL,

? `name` varchar(255) default NULL,

? `age` int(11) default NULL,

? PRIMARY KEY? (`presonid`),

? KEY `FK68A882C591BB393E` (`presonid`),

? CONSTRAINT `FK68A882C591BB393E` FOREIGN KEY (`presonid`) REFERENCES `address_11pk` (`addressid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

?

五、映射方法:在Person中配置id生成策略為:

?

??????? <id name="personid">

??????????? <!--基于主鍵關聯時,主鍵生成策略是foreign,表明根據關聯類生成主鍵-->

??????????? <generator class="foreign">

??????????????? <!--關聯持久化類的屬性名-->

??????????????? <param name="property">address11pk</param>

??????????? </generator>

??????? </id>

??????? ......

??????? <!--用于映射1-1關聯-->

??????? <one-to-one name="address11pk" constrained="true"/>

?

<hibernate-mapping>

??? <class name="com.lavasoft.dx._1_1_pk.Person11pk" table="PERSON_11pk">

??????? <id name="personid" column="presonid">

? ??????????<!--基于主鍵關聯時,主鍵生成策略是foreign,表明根據關聯類生成主鍵-->

??????????? <generator class="foreign">

??????????????? <!--關聯持久化類的屬性名-->

??????????????? <param name="property">address11pk</param>

??????????? </generator>

??????? </id>

??????? <property name="name"/>

??????? <property name="age"/>

??????? <!--用于映射1-1關聯-->

??????? <one-to-one name="address11pk" constrained="true"/>

??? </class>

</hibernate-mapping>

?

<hibernate-mapping>

??? <class name="com.lavasoft.dx._1_1_pk.Address11pk" table="ADDRESS_11pk">

??????? <id name="addressid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="addressdetail"/>

??? </class>

</hibernate-mapping>

?

?

六、測試方法

?

public class Test_11pk {

??? public static void main(String[] args){

??????? Person11pk p1=new Person11pk();

?

??????? p1.setAge(21);

??????? p1.setName("p1");

?

??????? Address11pk add1=new Address11pk();

??????? add1.setAddressdetail("鄭州市經三路");

?

??????? p1.setAddress11pk(add1);

?

??????? Session session= HibernateUtil.getCurrentSession();

??????? Transaction tx=session.beginTransaction();

??????? session.save(add1);

??????? session.save(p1);

??????? tx.commit();

??????? HibernateUtil.closeSession();

??? }

}

?

?

七、測試結果

?

1) :正常保存. 推薦這么干!

??????? session.save(add1);

??????? session.save(p1);

?

Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)

Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?)

?

2) :正常保存.

??????? session.save(p1);

??????? session.save(add1);

?

Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?)

Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)

Hibernate: update PERSON_11fk set name=?, age=?, addressId=? where personid=?

?

3) :正常保存.

//??????? session.save(p1);

??????? session.save(add1);

?

Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)

?

4) : 發生異常,不能保存.

??????? session.save(p1);

//??????? session.save(add1);

?

Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?)

Exception in thread "main" org.hibernate.TransientObjectException: com.lavasoft.dx._1_1_fk.Address11fk

?

==========================================

Hibernate 一對一連接表單向關聯
這種情況很少見,但Hibernate同樣允許采用連接表關聯1-1.有連接表的1-1同樣只需要將N-1的many-to-one元素增加unique="true"屬性即可。
一、模型介紹
一個人(Person)對應一個地址(Address)。
二、實體(省略getter、setter方法)
public class Person11tab {
private int personid;
private String name;
private int age;
private Address11tab address11tab;
public class Address11tab {
private int addressid;
private String addressdetail;
三、表模型
mysql> desc address_11tab;
+---------------+--------------+------+-----+---------+----------------+
| Field???????? | Type???????? | Null | Key | Default | Extra????????? |
+---------------+--------------+------+-----+---------+----------------+
| addressid???? | int(11)????? | NO?? | PRI | NULL??? | auto_increment |
| addressdetail | varchar(255) | YES? |???? | NULL??? |??????????????? |
+---------------+--------------+------+-----+---------+----------------+
mysql> desc join_11tab;
+--------------+---------+------+-----+---------+-------+
| Field??????? | Type??? | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| personid???? | int(11) | NO?? | PRI |???????? |?????? |
| address11tab | int(11) | YES? | UNI | NULL??? |?????? |
+--------------+---------+------+-----+---------+-------+
mysql> desc person_11tab;
+----------+--------------+------+-----+---------+----------------+
| Field??? | Type???????? | Null | Key | Default | Extra????????? |
+----------+--------------+------+-----+---------+----------------+
| personid | int(11)????? | NO?? | PRI | NULL??? | auto_increment |
| name???? | varchar(255) | YES? |???? | NULL??? |??????????????? |
| age????? | int(11)????? | YES? |???? | NULL??? |??????????????? |
+----------+--------------+------+-----+---------+----------------+
四、生成的SQL腳本
/* Formatted on 2007/08/20 16:52 (QP5 v5.50) */
CREATE TABLE `join_11tab` (
`personid` int(11) NOT NULL,
`address11tab` int(11) default NULL,
PRIMARY KEY? (`personid`),
UNIQUE KEY `address11tab` (`address11tab`),
KEY `FK6B44BE20C4CC3D33` (`address11tab`),
KEY `FK6B44BE209049BB1F` (`personid`),
CONSTRAINT `FK6B44BE209049BB1F` FOREIGN KEY (`personid`) REFERENCES `person_11tab` (`personid`),
CONSTRAINT `FK6B44BE20C4CC3D33` FOREIGN KEY (`address11tab`) REFERENCES `address_11tab` (`addressid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
?
/* Formatted on 2007/08/20 16:53 (QP5 v5.50) */
CREATE TABLE `address_11tab` (
`addressid` int(11) NOT NULL auto_increment,
`addressdetail` varchar(255) default NULL,
PRIMARY KEY? (`addressid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;
/* Formatted on 2007/08/20 16:53 (QP5 v5.50) */
CREATE TABLE `person_11tab` (
`personid` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`age` int(11) default NULL,
PRIMARY KEY? (`personid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;
五、映射方法:在Person中添加Address屬性,映射配置為:
<!--使用join元素顯式確定鏈接表-->
<join table="join_11tab">
<key column="personid"/>
<!--映射1-1關聯屬性,其中unique=“true”屬性確定為“1-1”-->
<many-to-one name="address11tab" unique="true"/>
</join>
<hibernate-mapping>
<class name="com.lavasoft.dx._1_1_tab.Person11tab" table="PERSON_11tab">
<id name="personid">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<!--使用join元素顯式確定鏈接表-->
<join table="join_11tab">
<key column="personid"/>
<!--映射1-1關聯屬性,其中unique=“true”屬性確定為“1-1”-->
<many-to-one name="address11tab" unique="true"/>
</join>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.lavasoft.dx._1_1_tab.Address11tab" table="ADDRESS_11tab">
<id name="addressid">
<generator class="identity"/>
</id>
<property name="addressdetail"/>
</class>
</hibernate-mapping>
六、測試方法
public class Test_11tab {
public static void main(String[] args){
Person11tab p1=new Person11tab();
p1.setAge(21);
p1.setName("p1");
Address11tab add1=new Address11tab();
add1.setAddressdetail("鄭州市經三路");
??????? p1.setAddress11tab(add1);
Session session= HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
session.save(add1);
session.save(p1);
tx.commit();
HibernateUtil.closeSession();
}
}
七、測試結果
1) :正常保存. 推薦這么干!
session.save(add1);
session.save(p1);
Hibernate: insert into ADDRESS_11tab (addressdetail) values (?)
Hibernate: insert into PERSON_11tab (name, age) values (?, ?)
Hibernate: insert into join_11tab (address11tab, personid) values (?, ?)
2) :正常保存.
session.save(p1);
session.save(add1);
Hibernate: insert into PERSON_11tab (name, age) values (?, ?)
Hibernate: insert into join_11tab (address11tab, personid) values (?, ?)
Hibernate: insert into ADDRESS_11tab (addressdetail) values (?)
Hibernate: update join_11tab set address11tab=? where personid=?
3) :正常保存.
//??????? session.save(p1);
session.save(add1);
Hibernate: insert into ADDRESS_11tab (addressdetail) values (?)
4) : 發生異常,不能保存.
session.save(p1);
//??????? session.save(add1);
Hibernate: insert into PERSON_11tab (name, age) values (?, ?)
Hibernate: insert into join_11tab (address11tab, personid) values (?, ?)
Exception in thread "main" org.hibernate.TransientObjectException: com.lavasoft.dx._1_1_tab.Address11tab

=====================================

Hibernate 一對多外鍵單向關聯
這種情況很少見,但Hibernate同樣允許采用連接表關聯1-1.有連接表的1-1同樣只需要將N-1的many-to-one元素增加unique="true"屬性即可。
一、模型介紹
一個人(Person)對應多個地址(Address),比如家庭地址、公司地址。
二、實體(省略getter、setter方法)
public class Person1nfk implements Serializable {
private int personid;
private String name;
private int age;
private Set addresses=new HashSet();
public class Address1nfk implements Serializable {
private int addressid;
private String addressdetail;
三、表模型
mysql> desc address_1nfk;
+---------------+--------------+------+-----+---------+----------------+
| Field???????? | Type???????? | Null | Key | Default | Extra????????? |
+---------------+--------------+------+-----+---------+----------------+
| addressid???? | int(11)????? | NO?? | PRI | NULL??? | auto_increment |
| addressdetail | varchar(255) | YES? |???? | NULL??? |??????????????? |
| personid????? | int(11)?? ???| YES? | MUL | NULL??? |??????????????? |
+---------------+--------------+------+-----+---------+----------------+
mysql> desc person_1nfk;
+----------+--------------+------+-----+---------+----------------+
| Field??? | Type???????? | Null | Key | Default | Extra????????? |
+----------+--------------+------+-----+---------+----------------+
| personid | int(11)????? | NO?? | PRI | NULL??? | auto_increment |
| name???? | varchar(255) | YES? |???? | NULL??? |??????????????? |
| age????? | int(11)????? | YES? |???? | NULL??? |??????????????? |
+----------+--------------+------+-----+---------+----------------+
四、生成的SQL腳本
/* Formatted on 2007/08/21 10:06 (QP5 v5.50) */
CREATE TABLE `address_1nfk` (
`addressid` int(11) NOT NULL auto_increment,
`addressdetail` varchar(255) default NULL,
`addresses` int(11) default NULL,
PRIMARY KEY? (`addressid`),
KEY `FK9B93456DC08D1667` (`addresses`),
CONSTRAINT `FK9B93456DC08D1667` FOREIGN KEY (`addresses`) REFERENCES `person_1nfk` (`personid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk;
/* Formatted on 2007/08/21 10:07 (QP5 v5.50) */
CREATE TABLE `person_1nfk` (
`personid` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`age` int(11) default NULL,
PRIMARY KEY? (`personid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;
五、映射方法:在實體類Person里面添加Address的集合,即可形成一對多關系。
<!--映射集合屬性,關聯到持久化類,inverse="false"表示主控端在Person1nfk端,lazy="false"表示不采用延遲加載-->
<set name="addresses"
table="ADDRESS_1nfk"
cascade="all"
>
<!--確定關聯的外鍵列-->
<key column="personid"/>
<!--用以映射到關聯類屬性-->
<one-to-many class="com.lavasoft.dx._1_n_fk.Address1nfk"/>
</set>
<hibernate-mapping>
<class name="com.lavasoft.dx._1_n_fk.Person1nfk" table="PERSON_1nfk">
<id name="personid">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<!--映射集合屬性,關聯到持久化類,inverse="false"表示主控端在Person1nfk端,lazy="false"表示不采用延遲加載-->
<set name="addresses"
table="ADDRESS_1nfk"
cascade="all"
>
<!--確定關聯的外鍵列-->
<key column="personid"/>
<!--用以映射到關聯類屬性-->
<one-to-many class="com.lavasoft.dx._1_n_fk.Address1nfk"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.lavasoft.dx._1_n_fk.Address1nfk" table="ADDRESS_1nfk">
<id name="addressid">
<generator class="identity"/>
</id>
<property name="addressdetail"/>
</class>
</hibernate-mapping>
六、測試方法
public class Test_1nfk {
public static void main(String[] args){
Address1nfk add1=new Address1nfk();
Address1nfk add2=new Address1nfk();
Person1nfk p=new Person1nfk();
add1.setAddressdetail("鄭州市經三路");
add2.setAddressdetail("合肥市宿州路");
p.setName("wang");
p.setAge(30);
p.getAddresses().add(add1);
p.getAddresses().add(add2);
Session session= HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
session.save(add1);
session.save(add2);
session.save(p);
tx.commit();
HibernateUtil.closeSession();
}
}
七、測試結果
1) :正常保存.
//??????? session.save(add1);
//??????? session.save(add2);
session.save(p);
Hibernate: insert into PERSON_1nfk (name, age) values (?, ?)
Hibernate: insert into ADDRESS_1nfk (addressdetail) values (?)
Hibernate: insert into ADDRESS_1nfk (addressdetail) values (?)
Hibernate: update ADDRESS_1nfk set personid=? where addressid=?
Hibernate: update ADDRESS_1nfk set personid=? where addressid=?
2) :正常保存.
session.save(add1);
session.save(add2);
session.save(p);
Hibernate: insert into ADDRESS_1nfk (addressdetail) values (?)
Hibernate: insert into ADDRESS_1nfk (addressdetail) values (?)
Hibernate: insert into PERSON_1nfk (name, age) values (?, ?)
Hibernate: update ADDRESS_1nfk set personid=? where addressid=?
Hibernate: update ADDRESS_1nfk set personid=? where addressid=?
3) :正常保存.
session.save(add1);
session.save(add2);
//??????? session.save(p);
Hibernate: insert into ADDRESS_1nfk (addressdetail) values (?)
Hibernate: insert into ADDRESS_1nfk (addressdetail) values (?)

=============================

Hibernate 一對多連接表單向關聯

?

?

一、模型介紹

?

一個人(Person)對應多個地址(Address),比如家庭地址、公司地址。

?

二、實體(省略getter、setter方法)

?

public class Person1ntab {

??? private int personid;

??? private String name;

??? private int age;

??? private Set addresses=new HashSet();

?

public class Address1nfk implements Serializable {

??? private int addressid;

??? private String addressdetail;

?

三、表模型

?

mysql> desc join_1ntab;

+-----------+---------+------+-----+---------+-------+

| Field???? | Type??? | Null | Key | Default | Extra |

+-----------+---------+------+-----+---------+-------+

| personid? | int(11) | NO?? | PRI |???????? |?????? |

| addressid | int(11) | NO?? | PRI |???????? |?????? |

+-----------+---------+------+-----+---------+-------+

?

mysql> desc person_1ntab;

+----------+--------------+------+-----+---------+----------------+

| Field??? | Type???????? | Null | Key | Default | Extra????????? |

+----------+--------------+------+-----+---------+----------------+

| personid | int(11) ?????| NO?? | PRI | NULL??? | auto_increment |

| name???? | varchar(255) | YES? |???? | NULL??? |??????????????? |

| age????? | int(11)????? | YES? |???? | NULL??? |??????????????? |

+----------+--------------+------+-----+---------+----------------+

?

mysql> desc address_1ntab;

+---------------+--------------+------+-----+---------+----------------+

| Field???????? | Type???????? | Null | Key | Default | Extra????????? |

+---------------+--------------+------+-----+---------+----------------+

| addressid???? | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| addressdetail | varchar(255) | YES? |???? | NULL??? |??????????????? |

+---------------+--------------+------+-----+---------+----------------+

?

四、生成的SQL腳本

?

/* Formatted on 2007/08/21 10:58 (QP5 v5.50) */

CREATE TABLE `address_1ntab` (

? `addressid` int(11) NOT NULL auto_increment,

? `addressdetail` varchar(255) default NULL,

? PRIMARY KEY? (`addressid`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk;

?

/* Formatted on 2007/08/21 10:58 (QP5 v5.50) */

CREATE TABLE `join_1ntab` (

? `personid` int(11) NOT NULL,

? `addressid` int(11) NOT NULL,

? PRIMARY KEY? (`personid`,`addressid`),

? UNIQUE KEY `addressid` (`addressid`),

? KEY `FK6B6078C3C8DF5BFF` (`personid`),

? KEY `FK6B6078C3C2B11347` (`addressid`),

? CONSTRAINT `FK6B6078C3C2B11347` FOREIGN KEY (`addressid`) REFERENCES `address_1ntab` (`addressid`),

? CONSTRAINT `FK6B6078C3C8DF5BFF` FOREIGN KEY (`personid`) REFERENCES `person_1ntab` (`personid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

/* Formatted on 2007/08/21 10:58 (QP5 v5.50) */

CREATE TABLE `person_1ntab` (

? `personid` int(11) NOT NULL auto_increment,

? `name` varchar(255) default NULL,

? `age` int(11) default NULL,

? PRIMARY KEY? (`personid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;

?

?

五、映射方法

?

<hibernate-mapping>

??? <class name="com.lavasoft.dx._1_n_tab.Person1ntab" table="PERSON_1ntab">

??????? <id name="personid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="name"/>

??????? <property name="age"/>

??????? <!--映射集合屬性,join_1ntab是連接表表名-->

??????? <set name="addresses"

???????????? table="join_1ntab"

??????????????? >

??????????? <!--“column="personid"”確定PERSON_1ntab表關聯到連接表的外鍵列名-->

??????????? <key column="personid"/>

??????????? <!--“column="addressid"”關聯PERSON_1ntab表的Address1ntab對象的id在連接表中的列名-->

??????????? <!--“unique="true"表示1-N,Person1ntab是1,Address1ntab是多”-->

??????????? <many-to-many

??????????????????? column="addressid"

??????????????????? unique="true"

???????????????? ???class="com.lavasoft.dx._1_n_tab.Address1ntab"/>

??????? </set>

??? </class>

</hibernate-mapping>

?

<hibernate-mapping>

??? <class name="com.lavasoft.dx._1_n_tab.Address1ntab" table="ADDRESS_1ntab">

??????? <id name="addressid">

?? ?????????<generator class="identity"/>

??????? </id>

??????? <property name="addressdetail"/>

??? </class>

</hibernate-mapping>

?

?

六、測試方法

?

public class Test_1ntab {

??? public static void main(String[] args){

??????? Address1ntab add1=new Address1ntab();

??????? Address1ntab add2=new Address1ntab();

??????? Address1ntab add3=new Address1ntab();

??????? Person1ntab p1=new Person1ntab();

??????? Person1ntab p2=new Person1ntab();

?

??????? add1.setAddressdetail("鄭州市經三路");

??????? add2.setAddressdetail("合肥市宿州路");

??????? add3.setAddressdetail("北京市長安路");

??????? p1.setName("wang");

??????? p1.setAge(30);

??????? p2.setName("lee");

??????? p2.setAge(50);

?

??????? p1.getAddresses().add(add1);

??????? p1.getAddresses().add(add2);

??????? //p2.getAddresses().add(add2);

??????? p2.getAddresses().add(add3);

?

??????? Session session= HibernateUtil.getCurrentSession();

??????? Transaction tx=session.beginTransaction();

??????? session.save(add1);

??????? session.save(add2);

??????? session.save(add3);

??????? session.save(p1);

??????? session.save(p2);

??????? tx.commit();

??????? HibernateUtil.closeSession();

??? }

}

?

七、測試結果

?

1) :正常保存.

??????? session.save(add1);

??????? session.save(add2);

??????? session.save(add3);

??????? session.save(p1);

??????? session.save(p2);

Hibernate: insert into PERSON_1nfk (name, age) values (?, ?)

Hibernate: insert into ADDRESS_1nfk (addressdetail) values (?)

Hibernate: insert into ADDRESS_1nfk (addressdetail) values (?)

Hibernate: update ADDRESS_1nfk set personid=? where addressid=?

Hibernate: update ADDRESS_1nfk set personid=? where addressid=?

?

==================================

Hibernate 多對一外鍵單向關聯

?

一、模型介紹

?

多個人(Person)對應一個地址(Address)。

?

二、實體(省略getter、setter方法)

?

public class Personn1fk {

??? private int personid;

??? private String name;

??? private int age;

??? private Addressn1fk addressn1fk;

?

public class Addressn1fk {

??? private int addressid;

??? private String addressdetail;

?

三、表模型

?

mysql> desc address_n1kf;

+---------------+--------------+------+-----+---------+----------------+

| Field???????? | Type???????? | Null | Key | Default | Extra????????? |

+---------------+--------------+------+-----+---------+----------------+

| addressid???? | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| addressdetail | varchar(255) | YES? |???? | NULL??? |??? ????????????|

+---------------+--------------+------+-----+---------+----------------+

?

mysql> desc person_n1kf;

+-----------+--------------+------+-----+---------+----------------+

| Field???? | Type???????? | Null | Key | Default | Extra?? ???????|

+-----------+--------------+------+-----+---------+----------------+

| personid? | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| name????? | varchar(255) | YES? |???? | NULL??? |??????????????? |

| age?????? | int(11)????? | YES? |???? | NULL??? |??????????????? |

| addressId | int(11)????? | YES? | MUL | NULL??? |??????????????? |

+-----------+--------------+------+-----+---------+----------------+

?

四、生成的SQL腳本

?

CREATE TABLE `address_n1kf` (

? `addressid` int(11) NOT NULL auto_increment,

? `addressdetail` varchar(255) default NULL,

? PRIMARY KEY? (`addressid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

DROP TABLE IF EXISTS `person_n1kf`;

?

CREATE TABLE `person_n1kf` (

? `personid` int(11) NOT NULL auto_increment,

? `name` varchar(255) default NULL,

? `age` int(11) default NULL,

? `addressId` int(11) default NULL,

? PRIMARY KEY? (`personid`),

? KEY `FK4571AF54A2A3EE48` (`addressId`),

? CONSTRAINT `FK4571AF54A2A3EE48` FOREIGN KEY (`addressId`) REFERENCES `address_n1kf` (`addressid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

?

五、映射方法

?

<hibernate-mapping>

??? <class name="com.lavasoft.dx._n_1_fk.Personn1fk" table="PERSON_n1fk">

??????? <id name="personid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="name"/>

??????? <property name="age"/>

??????? <!--用來映射關聯PO column是Address在該表中的外鍵列名-->

??????? <many-to-one name="addressn1fk" column="addressId"/>

??? </class>

</hibernate-mapping>

?

<hibernate-mapping>

??? <class name="com.lavasoft.dx._n_1_fk.Addressn1fk" table="ADDRESS_n1fk">

??????? <id name="addressid">

??????????? <generator class="identity"/>

?????? ?</id>

??????? <property name="addressdetail"/>

??? </class>

</hibernate-mapping>

?

?

六、測試方法

?

public class Test_n1fk {

??? public static void main(String[] args){

??????? Personn1fk p1=new Personn1fk();

??????? Personn1fk p2=new Personn1fk();

?

??????? p1.setAge(21);

??????? p1.setName("p1");

?

??????? p2.setAge(23);

??????? p2.setName("p2");

?

??????? Addressn1fk add=new Addressn1fk();

??????? add.setAddressdetail("鄭州市經三路");

?

??????? p1.setAddressn1fk(add);

??????? p2.setAddressn1fk(add);

?

??????? Session session=HibernateUtil.getCurrentSession();

??????? Transaction tx=session.beginTransaction();

??????? session.save(add);

??????? session.save(p1);

??????? session.save(p2);

??????? tx.commit();

??????? HibernateUtil.closeSession();

??? }

}

?

七、測試結果

?

1) :正常保存. 推薦這么干!

?

??????? session.save(p1);

??????? session.save(p2);

?

Hibernate: insert into ADDRESS_n1kf (addressdetail) values (?)

Hibernate: insert into PERSON_n1kf (name, age, addressId) values (?, ?, ?)

Hibernate: insert into PERSON_n1kf (name, age, addressId) values (?, ?, ?)

?

2) :正常保存.

??????? session.save(p1);

??????? session.save(p2);

??????? session.save(add);

?

Hibernate: insert into PERSON_n1kf (name, age, addressId) values (?, ?, ?)

Hibernate: insert into PERSON_n1kf (name, age, addressId) values (?, ?, ?)

Hibernate: insert into ADDRESS_n1kf (addressdetail) values (?)

Hibernate: update PERSON_n1kf set name=?, age=?, addressId=? where personid=?

Hibernate: update PERSON_n1kf set name=?, age=?, addressId=? where personid=?

?

3) :正常保存.

??????? session.save(add);

//??????? session.save(p1);

//??????? session.save(p2);

?

Hibernate: insert into ADDRESS_n1kf (addressdetail) values (?)

?

4) : 發生異常,不能保存.

//??????? session.save(add);

??????? session.save(p1);

??????? session.save(p2);

Hibernate: insert into PERSON_n1kf (name, age, addressId) values (?, ?, ?)

Hibernate: insert into PERSON_n1kf (name, age, addressId) values (?, ?, ?)

Exception in thread "main" org.hibernate.TransientObjectException: com.lavasoft.dx._n_1_fk.Addressn1kf

?

?

?

===========================

Hibernate 多對一連接表單向關聯

?

一、模型介紹

?

多個人(Person)對應一個地址(Address)。

?

二、實體(省略getter、setter方法)

?

public class Personn1tab {

??? private int personid;

??? private String name;

??? private int age;

??? private Addressn1tab addressn1tab;

?

public class Addressn1tab {

??? private int addressid;

??? private String addressdetail;

?

三、表模型

?

mysql> desc address_n1tab;

+---------------+--------------+------+-----+---------+----------------+

| Field???????? | Type???????? | Null | Key | Default | Extra????????? |

+---------------+--------------+------+-----+---------+----------------+

| addressid???? | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| addressdetail | varchar(255) | YES? |???? | NULL??? |??????????????? |

+---------------+--------------+------+-----+---------+----------------+

?

mysql> desc join_n1tab;

+------------+---------+------+-----+---------+-------+

| Field????? | Type??? | Null | Key | Default | Extra |

+------------+---------+------+-----+---------+-------+

| personid?? | int(11) | NO?? | PRI |???????? |?????? |

| addressn1tab | int(11) | YES? | MUL | NULL??? |?????? |

+------------+---------+------+-----+---------+-------+

?

mysql> desc person_n1tab;

+----------+--------------+------+-----+---------+----------------+

| Field??? | Type???????? | Null | Key | Default | Extra????????? |

+----------+--------------+------+-----+---------+----------------+

| personid | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| name???? | varchar(255) | YES? |???? | NULL??? |??????????????? |

| age????? | int(11)????? | YES? |???? | NULL??? |??????????????? |

+----------+--------------+------+-----+---------+----------------+

?

四、生成的SQL腳本

?

CREATE TABLE `address_n1tab` (

? `addressid` int(11) NOT NULL auto_increment,

? `addressdetail` varchar(255) default NULL,

? PRIMARY KEY? (`addressid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;

?

CREATE TABLE `join_n1tab` (

? `personid` int(11) NOT NULL,

? `address11fk` int(11) default NULL,

? PRIMARY KEY? (`personid`),

? KEY `FKAC780AAADAE3A82C` (`personid`),

? KEY `FKAC780AAAC6242A64` (`address11fk`),

? CONSTRAINT `FKAC780AAAC6242A64` FOREIGN KEY (`address11fk`) REFERENCES `address_n1tab` (`addressid`),

? CONSTRAINT `FKAC780AAADAE3A82C` FOREIGN KEY (`personid`) REFERENCES `person_n1tab` (`personid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

CREATE TABLE `person_n1tab` (

? `personid` int(11) NOT NULL auto_increment,

? `name` varchar(255) default NULL,

? `age` int(11) default NULL,

? PRIMARY KEY? (`personid`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk;

?

?

五、映射方法

?

<hibernate-mapping>

??? <class name="com.lavasoft.dx._n_1_tab.Personn1tab" table="PERSON_n1tab">

??????? <id name="personid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="name"/>

??????? <property name="age"/>

??????? <!--使用join元素顯式確定鏈接表-->

??????? <join table="join_n1tab">

??????????? <!--映射關聯所用的外鍵-->

??????????? <key column="personid"/>

??????????? <many-to-one name="addressn1tab"/>

??????? </join>

??? </class>

</hibernate-mapping>

?

<hibernate-mapping>

??? <class name="com.lavasoft.dx._n_1_tab.Addressn1tab" table="ADDRESS_n1tab">

??????? <id name="addressid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="addressdetail"/>

??? </class>

</hibernate-mapping>

?

?

六、測試方法

?

public class Test_n1tab {

??? public static void main(String[] args){

??????? Personn1tab p1=new Personn1tab();

??????? Personn1tab p2=new Personn1tab();

?

??????? p1.setAge(21);

??????? p1.setName("p1");

?

??????? p2.setAge(23);

??????? p2.setName("p2");

?

??????? Addressn1tab add=new Addressn1tab();

??????? add.setAddressdetail("鄭州市經三路");

?

??????? p1.setAddressn1tab(add);

??????? p2.setAddressn1tab(add);

?

??????? Session session=HibernateUtil.getCurrentSession();

??????? Transaction tx=session.beginTransaction();

??????? session.save(add);

??????? session.save(p1);

??????? session.save(p2);

??????? tx.commit();

??????? HibernateUtil.closeSession();

??? }

}

?

七、測試結果

?

1) :正常保存. 推薦這么干!

?

??????? session.save(p1);

??????? session.save(p2);

?

Hibernate: insert into ADDRESS_n1tab (addressdetail) values (?)

Hibernate: insert into PERSON_n1tab (name, age) values (?, ?)

Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?)

Hibernate: insert into PERSON_n1tab (name, age) values (?, ?)

Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?)

?

2) :正常保存.

??????? session.save(p1);

??????? session.save(p2);

??????? session.save(add);

?

?Hibernate: insert into PERSON_n1tab (name, age) values (?, ?)

?Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?)

?Hibernate: insert into PERSON_n1tab (name, age) values (?, ?)

?Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?)

?

?

?

====================

Hibernate 多對多單向關聯

?

一、模型介紹

?

多個人(Person)對應多個地址(Address)。

一個人可對應多個地址,一個地址也可以對應多個人。?

二、實體(省略getter、setter方法)

?

public class Personnn {

??? private int personid;

??? private String name;

??? private int age;

??? private Set addresses=new HashSet();

?

public class Addressnn {

??? private int addressid;

??? private String addressdetail;

?

三、表模型

?

mysql> desc person_nn;

+----------+--------------+------+-----+---------+----------------+

| Field??? | Type???????? | Null | Key | Default | Extra????????? |

+----------+--------------+------+-----+---------+----------------+

| personid | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| name???? | varchar(255) | YES? |???? | NULL??? |??????????????? |

| age????? | int(11)????? | YES? |???? | NULL??? |??????????????? |

+----------+--------------+------+-----+---------+----------------+

?

mysql> desc join_nn;

+-----------+---------+------+-----+---------+-------+

| Field???? | Type??? | Null | Key | Default | Extra |

+-----------+---------+------+-----+---------+-------+

| personid? | int(11) | NO?? | PRI |???????? |?????? |

| addressid | int(11) | NO?? | PRI |???????? |?????? |

+-----------+---------+------+-----+---------+-------+

?

mysql> desc person_nn;

+----------+--------------+------+-----+---------+----------------+

| Field??? | Type???????? | Null | Key | Default | Extra????????? |

+----------+--------------+------+-----+---------+----------------+

| personid | int(11)??? ??| NO?? | PRI | NULL??? | auto_increment |

| name???? | varchar(255) | YES? |???? | NULL??? |??????????????? |

| age????? | int(11)????? | YES? |???? | NULL??? |??????????????? |

+----------+--------------+------+-----+---------+----------------+

?

四、生成的SQL腳本

?

/* Formatted on 2007/08/21 11:13 (QP5 v5.50) */

CREATE TABLE `address_nn` (

? `addressid` int(11) NOT NULL auto_increment,

? `addressdetail` varchar(255) default NULL,

? PRIMARY KEY? (`addressid`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=gbk;

?

/* Formatted on 2007/08/21 11:14 (QP5 v5.50) */

CREATE TABLE `join_nn` (

? `personid` int(11) NOT NULL,

? `addressid` int(11) NOT NULL,

? PRIMARY KEY? (`personid`,`addressid`),

? KEY `FKAAB98CF5E008E752` (`personid`),

? KEY `FKAAB98CF5239F6A16` (`addressid`),

? CONSTRAINT `FKAAB98CF5239F6A16` FOREIGN KEY (`addressid`) REFERENCES `address_nn` (`addressid`),

? CONSTRAINT `FKAAB98CF5E008E752` FOREIGN KEY (`personid`) REFERENCES `person_nn` (`personid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

/* Formatted on 2007/08/21 11:14 (QP5 v5.50) */

CREATE TABLE `person_nn` (

? `personid` int(11) NOT NULL auto_increment,

? `name` varchar(255) default NULL,

? `age` int(11) default NULL,

? PRIMARY KEY? (`personid`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk;

?

五、映射方法

?

<hibernate-mapping>

??? <class name="com.lavasoft.dx._n_n.Personnn" table="PERSON_nn">

??????? <id name="personid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="name"/>

??????? <property name="age"/>

??????? <!--映射集合屬性,join_1ntab是連接表表名-->

??????? <set name="addresses"

???????????? table="join_nn"

????????????? ??>

??????????? <!--“column="personid"”確定PERSON_1ntab表關聯到連接表的外鍵列名-->

??????????? <key column="personid"/>

??????????? <!--“column="addressid"”關聯PERSON_1ntab表的Address1ntab對象的id在連接表中的列名-->

??????????? <many-to-many

??????????????????? column="addressid"

??????????????????? class="com.lavasoft.dx._n_n.Addressnn"/>

??????? </set>

??? </class>

</hibernate-mapping>

?

<hibernate-mapping>

??? <class name="com.lavasoft.dx._n_n.Addressnn" table="ADDRESS_nn">

??????? <id name="addressid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="addressdetail"/>

??? </class>

</hibernate-mapping>

?

?

六、測試方法

?

public class Test_nn {

??? public static void main(String[] args){

?? ?????Addressnn add1=new Addressnn();

??????? Addressnn add2=new Addressnn();

??????? Addressnn add3=new Addressnn();

??????? Personnn p1=new Personnn();

??????? Personnn p2=new Personnn();

?

??????? add1.setAddressdetail("鄭州市經三路");

???? ???add2.setAddressdetail("合肥市宿州路");

??????? add3.setAddressdetail("北京市長安路");

??????? p1.setName("wang");

??????? p1.setAge(30);

??????? p2.setName("lee");

??????? p2.setAge(50);

?

??????? p1.getAddresses().add(add1);

??????? p1.getAddresses().add(add2);

??????? p2.getAddresses().add(add2);

??????? p2.getAddresses().add(add3);

?

??????? Session session= HibernateUtil.getCurrentSession();

??????? Transaction tx=session.beginTransaction();

??????? session.save(add1);

??????? session.save(add2);

??????? session.save(add3);

??????? session.save(p1);

??????? session.save(p2);

??????? tx.commit();

??????? HibernateUtil.closeSession();

??? }

}

?

七、測試結果

?

1) :正常保存.

???? ???session.save(add1);

??????? session.save(add2);

??????? session.save(add3);

??????? session.save(p1);

??????? session.save(p2);

?

Hibernate: insert into ADDRESS_nn (addressdetail) values (?)

Hibernate: insert into ADDRESS_nn (addressdetail) values (?)

Hibernate: insert into ADDRESS_nn (addressdetail) values (?)

Hibernate: insert into PERSON_nn (name, age) values (?, ?)

Hibernate: insert into PERSON_nn (name, age) values (?, ?)

Hibernate: insert into join_nn (personid, addressid) values (?, ?)

Hibernate: insert into join_nn (personid, addressid) values (?, ?)

Hibernate: insert into join_nn (personid, addressid) values (?, ?)

Hibernate: insert into join_nn (personid, addressid) values (?, ?)

?

=========================

Hibernate 一對一外鍵雙向關聯 一對一外鍵關聯是一對多外鍵關聯的特例,只是在多的一方加了個唯一性約束。 一、模型 一個人對應一個地址。 /*==============================================================*/
/* DBMS name:????? MySQL 5.0??????????????????????????????????? */
/* Created on:???? 2008-12-9 0:12:54??????????????????????????? */
/*==============================================================*/
drop table if exists address; drop table if exists person; /*==============================================================*/
/* Table: address?????????????????????????????????????????????? */
/*==============================================================*/
create table address
(
?? id?????????????????? bigint not null auto_increment comment 'ID',
?? detail?????????????? varchar(120) not null comment '詳細地址',
?? personid???????????? bigint comment '人的ID',
?? primary key (id)
)
type = InnoDB; alter table address comment '地址'; /*==============================================================*/
/* Table: person??????????????????????????????????????????????? */
/*==============================================================*/
create table person
(
?? id?????????????????? bigint not null auto_increment comment 'ID',
?? name???????????????? varchar(24) not null comment '姓名',
?? primary key (id)
)
type = InnoDB; alter table person comment '人'; alter table address add constraint FK_Reference_4 foreign key (personid)
????? references person (id) on delete restrict on update restrict; 二、對象模型 public class Person implements java.io.Serializable {

??private Long id;
??private String name;
??private Address address; public class Address implements java.io.Serializable {
??private Long id;
??private Person person;
??private String detail; 三、映射文件 <?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="entity.Person" table="person">
????<id name="id" type="java.lang.Long">
??????<column name="id" />
??????<generator class="identity" />
????</id>
????<property name="name" type="java.lang.String">
??????<column name="name" length="24" not-null="true">
????????<comment>姓名</comment>
??????</column>
????</property>
????<one-to-one name="address" cascade="all" />
??</class>
</hibernate-mapping> <?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="entity.Address" table="address" catalog="testdb">
????<id name="id" type="java.lang.Long">
??????<column name="id" />
??????<generator class="identity" />
????</id>
????<property name="detail" type="java.lang.String">
??????<column name="detail" length="120" not-null="true">
????????<comment>詳細地址</comment>
??????</column>
????</property>
????<many-to-one name="person" class="entity.Person"
??????fetch="select" unique="true">
??????<column name="personid">
????????<comment>人的ID</comment>
??????</column>
????</many-to-one>
??</class>
</hibernate-mapping> <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
????????????????????"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
????????????????????"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.???????????????????????????????????? -->
<hibernate-configuration>

??<session-factory>
????<property name="connection.username">root</property>
????<property name="connection.url">
??????jdbc:mysql://localhost:3306/testdb
????</property>
????<property name="dialect">
??????org.hibernate.dialect.MySQLDialect
????</property>
????<property name="connection.password">xiaohui</property>
????<property name="connection.driver_class">
??????com.mysql.jdbc.Driver
????</property>
????<property name="show_sql">true</property>
????<property name="format_sql">true</property>
????<mapping resource="entity/Person.hbm.xml" />
????<mapping resource="entity/Address.hbm.xml" />

??</session-factory>

</hibernate-configuration> 四、測試 import org.hibernate.Transaction;

import entity.Address;
import entity.Person;

import utils.HibernateSessionFactory;

public class Test {
??public static void main(String[] args) {
????savePerson();
??}

??public static void savePerson() {
????Person person = new Person("張三");
????Address address = new Address("XX街X號");
????person.setAddress(address);
????address.setPerson(person);

????Session session = HibernateSessionFactory.getSession();
????Transaction tx = session.beginTransaction();
????session.save(person);
????tx.commit();
??}
} 運行日志: Hibernate:????
????????insert????
????????into
????????????????person
????????????????(name)????
????????values
????????????????(?)
Hibernate:????
????????insert????
????????into
????????????????testdb.address
????????????????(detail, personid)????
????????values
????????????????(?, ?)

?

======================

Hibernate 一對一主鍵雙向關聯 一對一主鍵映射在一對一映射中還算是最為常用的。 一、模型 一個人Person 對應一個地址Address。 二、數據模型和對象模型圖 導出建表SQL如下: /*==============================================================*/
/* DBMS name:????????????MySQL 5.0????????????????????????????????????????????????????????????????????????*/
/* Created on:???????? 2008-12-8 23:05:32???????????????????????????????????????????????????? */
/*==============================================================*/


drop table if exists address;

drop table if exists person;

/*==============================================================*/
/* Table: address???????????????????????????????????????????????????????????????????????????????????????????? */
/*==============================================================*/
create table address
(
???? id???????????????????????????????????? bigint not null comment 'ID',
???? detail???????????????????????????? varchar(120) not null comment '詳細地址',
???? primary key (id)
)
type = InnoDB;

alter table address comment '地址';

/*==============================================================*/
/* Table: person????????????????????????????????????????????????????????????????????????????????????????????????*/
/*==============================================================*/
create table person
(
???? id???????????????????????????????????? bigint not null auto_increment comment 'ID',
???? name???????????????????????????????? varchar(24) not null comment '姓名',
???? primary key (id)
)
type = InnoDB;

alter table person comment '人';

alter table address add constraint FK_Reference_2 foreign key (id)
????????????references person (id) on delete restrict on update restrict; 三、對象模型代碼 public class Person implements java.io.Serializable {

??private Long id;
??private String name;
??private Address address; public class Address implements java.io.Serializable {
??private Long id;
??private Person person;
??private String detail; 四、映射代碼 <?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="entity.Person" table="person">
????<id name="id" type="java.lang.Long">
??????<column name="id" />
??????<generator class="identity" />
????</id>
????<property name="name" type="java.lang.String">
??????<column name="name" length="24" not-null="true">
????????<comment>姓名</comment>
??????</column>
????</property>
????<!-- cascade="all":在保存person對象的時候,級聯保存person對象關聯的address對象????-->
????<one-to-one name="address" cascade="all" />
??</class>
</hibernate-mapping> <?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="entity.Address" table="address" catalog="mydb">
????<id name="id" type="java.lang.Long">
??????<column name="id" />
??????<!-- class="foreign": 一對一主鍵映射中,使用另外一個相關聯的對象的標識符 -->
??????<generator class="foreign">
????????<param name="property">person</param>
??????</generator>
????</id>
????<property name="detail" type="java.lang.String">
??????<column name="detail" length="120" not-null="true">
????????<comment>詳細地址</comment>
??????</column>
????</property>
????<!-- 表示在address表存在一個外鍵約束,外鍵參考相關聯的表person -->
????<one-to-one name="person" constrained="true" />
??</class>
</hibernate-mapping> 五、Hibernate配置 <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
????????????????????"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
????????????????????"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.???????????????????????????????????? -->
<hibernate-configuration>

<session-factory>
??<property name="connection.username">root</property>
??<property name="connection.url">
????jdbc:mysql://localhost:3306/mydb
??</property>
??<property name="dialect">
????org.hibernate.dialect.MySQLDialect
??</property>
??<property name="connection.password">xiaohui</property>
??<property name="connection.driver_class">
????com.mysql.jdbc.Driver
??</property>
??<property name="show_sql">true</property>
??<property name="format_sql">true</property>
??<mapping resource="entity/Person.hbm.xml" />
??<mapping resource="entity/Address.hbm.xml" />

</session-factory>

</hibernate-configuration> 測試很簡單就不寫了。

?

====================

Hibernate 一對一連接表雙向關聯

?

一、模型介紹

?

一個人(Person)對應一個地址(Address)。

?

二、實體(省略getter、setter方法)

?

public class Person11tab_sx {

??? private int personid;

??? private String name;

??? private int age;

??? private Address11tab_sx address11tab_sx;

?

public class Address11tab_sx {

??? private int addressid;

??? private String addressdetail;

??? private Person11tab_sx person11tab_sx;

?

三、表模型

?

mysql> desc person_11tab_sx;

+----------+--------------+------+-----+---------+----------------+

| Field??? | Type???????? | Null | Key | Default | Extra????????? |

+----------+--------------+------+-----+---------+----------------+

| personid | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| name???? | varchar(255) | YES? |???? | NULL??? |??????????????? |

| age????? | int(11)????? | YES? |???? | NULL??? |??????????????? |

+----------+--------------+------+-----+---------+----------------+

?

mysql> desc join_11tab_sx;

+-----------+---------+------+-----+---------+-------+

| Field???? | Type??? | Null | Key | Default | Extra |

+-----------+---------+------+-----+---------+-------+

| addressid | int(11) | NO?? | UNI |???????? |?????? |

| personid? | int(11) | NO?? | PRI |???????? |?????? |

+-----------+---------+------+-----+---------+-------+

?

mysql> desc address_11tab_sx;

+---------------+--------------+------+-----+---------+----------------+

| Field???????? | Type???????? | Null | Key | Default | Extra????????? |

+---------------+--------------+------+-----+---------+----------------+

| addressid???? | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| addressdetail | varchar(255) | YES? |???? | NULL??? |??????????????? |

+---------------+--------------+------+-----+---------+----------------+

?

四、生成的SQL腳本

?

/* Formatted on 2007/08/22 17:35 (QP5 v5.50) */

CREATE TABLE `person_11tab_sx` (

? `personid` int(11) NOT NULL auto_increment,

? `name` varchar(255) default NULL,

? `age` int(11) default NULL,

? PRIMARY KEY? (`personid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

/* Formatted on 2007/08/22 17:34 (QP5 v5.50) */

CREATE TABLE `address_11tab_sx` (

? `addressid` int(11) NOT NULL auto_increment,

? `addressdetail` varchar(255) default NULL,

? PRIMARY KEY? (`addressid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

/* Formatted on 2007/08/22 18:35 (QP5 v5.50) */
CREATE TABLE `join_11tab_sx` (
? `addressid` int(11) NOT NULL,
? `personid` int(11) NOT NULL,
? PRIMARY KEY? (`personid`),
? UNIQUE KEY `addressid` (`addressid`),
? UNIQUE KEY `personid` (`personid`),
? KEY `FKF4AA80E44327AAB6` (`personid`),
? KEY `FKF4AA80E460C0C9F0` (`addressid`),
? CONSTRAINT `FKF4AA80E460C0C9F0` FOREIGN KEY (`addressid`) REFERENCES `address_11tab_sx` (`addressid`),
? CONSTRAINT `FKF4AA80E44327AAB6` FOREIGN KEY (`personid`) REFERENCES `person_11tab_sx` (`personid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

?

?

五、映射方法

?

<hibernate-mapping>

??? <class name="com.lavasoft.sx._1_1_tab.Person11tab_sx" table="PERSON_11tab_sx">

??????? <id name="personid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="name"/>

??????? <property name="age"/>

??????? <join table="join_11tab_sx"

????????????? optional="true">

??????????? <key column="personid"

???????????????? unique="true"/>

??????????? <many-to-one name="address11tab_sx"

???????????????????????? column="addressid"

???????????????????????? not-null="true"

???????????????????????? unique="true"/>

??????? </join>

??? </class>

</hibernate-mapping>

?

<hibernate-mapping>

??? <class name="com.lavasoft.sx._1_1_tab.Address11tab_sx" table="ADDRESS_11tab_sx">

??????? <id name="addressid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="addressdetail"/>

??????? <join table="join_11tab_sx"

????????????? optional="true"

????????????? inverse="true">

??????????? <key column="addressid"

???????????????? unique="true"/>

??????????? <many-to-one name="person11tab_sx" column="personid"

???????????????????????? not-null="true" unique="true"/>

??????? </join>

??? </class>

</hibernate-mapping>

?

六、測試方法

?

public class Test_11tab_sx {

??? public static void main(String[] args){

??????? Address11tab_sx add = new Address11tab_sx();

??????? Person11tab_sx p = new Person11tab_sx();

?

??????? add.setAddressdetail("鄭州市經三路");

??????? p.setAge(12);

??????? p.setName("wudalang");

?

??????? add.setPerson11tab_sx(p);

??????? p.setAddress11tab_sx(add);

?

??????? Session session = HibernateUtil.getCurrentSession();

??????? Transaction tx = session.beginTransaction();

??????? session.saveOrUpdate(p);

??????? session.saveOrUpdate(add);

??????? tx.commit();

??????? HibernateUtil.closeSession();

??? }

}

?

七、測試結果

?

1) :正常保存.

??????? session.saveOrUpdate(p);

??????? session.saveOrUpdate(add);

?

Hibernate: insert into PERSON_11tab_sx (name, age) values (?, ?)

Hibernate: insert into ADDRESS_11tab_sx (addressdetail) values (?)

Hibernate: insert into join_11tab_sx (addressid, personid) values (?, ?)

?

======================

Hibernate 一對多外鍵雙向關聯

?

一、模型介紹

?

一個人(Person)對應多個地址(Address)。

?

二、實體(省略getter、setter方法)

?

public class Person1nfk_sx implements Serializable {

??? private int personid;

??? private String name;

??? private int age;

??? private Set addresses=new HashSet();

?

public class Address1nfk_sx implements Serializable {

??? private int addressid;

??? private String addressdetail;

??? private Person1nfk_sx person1nfkSx;

?

三、表模型

?

mysql> desc person_1nfk_sx;

+----------+--------------+------+-----+---------+----------------+

| Field??? | Type???????? | Null | Key | Default | Extra????????? |

+----------+--------------+------+-----+---------+----------------+

| personid | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| name???? | varchar(255) | YES? |???? | NULL??? |??????????????? |

| age????? | int(11)????? | YES? |???? | NULL??? |??????????????? |

+----------+--------------+------+-----+---------+----------------+

?

mysql> desc address_1nfk_sx;

+---------------+--------------+------+-----+---------+----------------+

| Field???????? | Type???????? | Null | Key | Default | Extra????????? |

+---------------+--------------+------+-----+---------+----------------+

| addressid???? | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| addressdetail | varchar(255) | YES? |???? | NULL??? |??????????????? |

| personid????? | int(11)????? | NO?? | MUL |???????? |??????????????? |

+---------------+--------------+------+-----+---------+----------------+

?

四、生成的SQL腳本

?

? /* Formatted on 2007/08/22 17:42 (QP5 v5.50) */

? CREATE TABLE `address_1nfk` (

??? `addressid` int(11) NOT NULL auto_increment,

??? `addressdetail` varchar(255) default NULL,

??? `personid` int(11) default NULL,

??? PRIMARY KEY? (`addressid`),

??? KEY `FK9B93456DA6D6C1F5` (`personid`),

??? CONSTRAINT `FK9B93456DA6D6C1F5` FOREIGN KEY (`personid`) REFERENCES `person_1nfk` (`personid`)

? ) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

?

? /* Formatted on 2007/08/22 17:42 (QP5 v5.50) */

? CREATE TABLE `person_1nfk` (

??? `personid` int(11) NOT NULL auto_increment,

??? `name` varchar(255) default NULL,

??? `age` int(11) default NULL,

??? PRIMARY KEY? (`personid`)

? ) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

五、映射方法

?

<hibernate-mapping>

??? <class name="com.lavasoft.sx._1_n_fk.Person1nfk_sx" table="PERSON_1nfk_sx">

??????? <id name="personid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="name"/>

??????? <property name="age"/>

??????? <!--映射集合屬性,關聯到持久化類-->

??????? <set name="addresses" inverse="true" cascade="all">

??????????? <!--column用于指定外鍵列名-->

??????????? <key column="personid" not-null="true"/>

??????????? <!--映射關聯類-->

??????????? <one-to-many class="com.lavasoft.sx._1_n_fk.Address1nfk_sx"/>

??????? </set>

??? </class>

</hibernate-mapping>

?

<hibernate-mapping>

??? <class name="com.lavasoft.sx._1_n_fk.Address1nfk_sx" table="ADDRESS_1nfk_sx">

??????? <id name="addressid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="addressdetail"/>

??????? <!--映射關聯屬性,column屬性指定外鍵列名-->

??????? <many-to-one name="person1nfk"

???????????????????? class="com.lavasoft.sx._1_n_fk.Person1nfk_sx"

???????????????????? fetch="select"

???????????????????? cascade="save-update">

??????????? <column name="personid" not-null="true"/>

??????? </many-to-one>

??? </class>

</hibernate-mapping>

?

六、測試方法

?

public class Test_1nfk_sx {

??? public static void main(String[] args){

??????? Address1nfk_sx add1=new Address1nfk_sx();

??????? Address1nfk_sx add2=new Address1nfk_sx();

??????? Person1nfk_sx p=new Person1nfk_sx();

?

??????? add1.setAddressdetail("鄭州市經三路");

??????? add2.setAddressdetail("合肥市宿州路");

??????? p.setName("wang");

??????? p.setAge(30);

?

??????? p.getAddresses().add(add1);

??????? p.getAddresses().add(add2);

??????? add1.setPerson1nfk(p);

????? ??add2.setPerson1nfk(p);

?

??????? Session session= HibernateUtil.getCurrentSession();

??????? Transaction tx=session.beginTransaction();

??????? session.save(p);

??????? session.saveOrUpdate(add1);

??????? session.saveOrUpdate(add2);

? ??????tx.commit();

??????? HibernateUtil.closeSession();

??? }

}

?

七、測試結果

?

1) :正常保存.

??????? session.save(p);

??????? session.saveOrUpdate(add1);

??????? session.saveOrUpdate(add2);

?

Hibernate: insert into PERSON_1nfk_sx (name, age) values (?, ?)

Hibernate: insert into ADDRESS_1nfk_sx (addressdetail, personid) values (?, ?)

Hibernate: insert into ADDRESS_1nfk_sx (addressdetail, personid) values (?, ?)

?

=======================

Hibernate 一對多連接表雙向關聯

?

一、模型介紹

?

一個人(Person)對應多個地址(Address)。

?

二、實體(省略getter、setter方法)

?

public class Person1ntab_sx {

??? private int personid;

??? private String name;

??? private int age;

??? private Set addresses=new HashSet();

?

public class Address1ntab_sx {

??? private int addressid;

??? private String addressdetail;

??? private Person1ntab_sx person1ntab_sx;

?

三、表模型

?

mysql> desc person_1ntab_sx;

+----------+--------------+------+-----+---------+----------------+

| Field??? | Type???????? | Null | Key | Default | Extra????????? |

+----------+--------------+------+-----+---------+----------------+

| personid | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| name???? | varchar(255) | YES? |???? | NULL??? |??????????????? |

| age????? | int(11)????? | YES? |???? | NULL??? |??????????????? |

+----------+--------------+------+-----+---------+----------------+

?

mysql> desc address_1ntab_sx;

+---------------+--------------+------+-----+---------+----------------+

| Field???????? | Type???????? | Null | Key | Default | Extra????????? |

+---------------+--------------+------+-----+---------+----------------+

| addressid???? | int(11)????? | NO?? | PRI | NULL??? | auto_increment |

| addressdetail | varchar(255) | YES? |???? | NULL??? |??????????????? |

+---------------+--------------+------+-----+---------+----------------+

?

mysql> desc join_1ntab_sx;

+-----------+---------+------+-----+---------+-------+

| Field???? | Type??? | Null | Key | Default | Extra |

+-----------+---------+------+-----+---------+-------+

| addressid | int(11) | NO?? | PRI |???????? |?????? |

| personid? | int(11) | NO?? | PRI |???????? |?????? |

+-----------+---------+------+-----+---------+-------+

?

四、生成的SQL腳本

?

/* Formatted on 2007/08/22 17:52 (QP5 v5.50) */

CREATE TABLE `address_1ntab_sx` (

? `addressid` int(11) NOT NULL auto_increment,

? `addressdetail` varchar(255) default NULL,

? PRIMARY KEY? (`addressid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

/* Formatted on 2007/08/22 17:52 (QP5 v5.50) */

CREATE TABLE `person_1ntab_sx` (

? `personid` int(11) NOT NULL auto_increment,

? `name` varchar(255) default NULL,

? `age` int(11) default NULL,

? PRIMARY KEY? (`personid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

/* Formatted on 2007/08/22 17:52 (QP5 v5.50) */

CREATE TABLE `join_1ntab_sx` (

? `addressid` int(11) NOT NULL,

? `personid` int(11) NOT NULL,

? PRIMARY KEY? (`personid`,`addressid`),

? KEY `FK8F869F61F93DDD6` (`personid`),

? KEY `FK8F869F61FC0F682A` (`addressid`),

? CONSTRAINT `FK8F869F61FC0F682A` FOREIGN KEY (`addressid`) REFERENCES `address_1ntab_sx` (`addressid`),

? CONSTRAINT `FK8F869F61F93DDD6` FOREIGN KEY (`personid`) REFERENCES `person_1ntab_sx` (`personid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

?

五、映射方法

?

<hibernate-mapping>

??? <class name="com.lavasoft.sx._1_n_tab.Person1ntab_sx" table="PERSON_1ntab_sx">

??????? <id name="personid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="name"/>

??????? <property name="age"/>

??????? <!--映射集合屬性,關聯到持久化類-->

??????? <!--table="join_1ntab_sx"指定了連接表的名字-->

??????? <set name="addresses"

?????????? ??table="join_1ntab_sx"

???????????? cascade="all">

??????????? <!--column="personid"指定連接表中關聯當前實體類的列名-->

??????????? <key column="personid" not-null="true"/>

??????????? <!--unique="true"表示當前實體類是"1",不是"n"-->

??????????? <many-to-many column="addressid"

????????????????????????? unique="true"

????????????????????????? class="com.lavasoft.sx._1_n_tab.Address1ntab_sx"/>

??????? </set>

??? </class>

</hibernate-mapping>

?

<hibernate-mapping>

??? <class name="com.lavasoft.sx._1_n_tab.Address1ntab_sx"

?????????? table="ADDRESS_1ntab_sx">

??????? <id name="addressid">

??????????? <generator class="identity"/>

??????? </id>

??????? <property name="addressdetail"/>

??????? <!--映射關聯屬性,column屬性指定外鍵列名-->

??????? <join?? table="join_1ntab_sx"

??????????????? inverse="true"

????????????? optional="true">

??????????? <key column="addressid"/>

??????????? <many-to-one name="person1ntab_sx"

???????????????????????? column="personid"

???????????????????????? cascade="all"

???????????????????????? not-null="true"/>

??????? </join>

??? </class>

</hibernate-mapping>

?

六、測試方法

?

public class Test_1ntab_sx {

??? public static void main(String[] args){

??????? Address1ntab_sx add1=new Address1ntab_sx();

??????? Address1ntab_sx add2=new Address1ntab_sx();

??????? Person1ntab_sx p=new Person1ntab_sx();

?

??????? add1.setAddressdetail("鄭州市經三路");

????? ??add2.setAddressdetail("合肥市宿州路");

??????? p.setName("wang");

??????? p.setAge(30);

?

??????? p.getAddresses().add(add1);

??????? p.getAddresses().add(add2);

??????? add1.setPerson1ntab_sx(p);

??????? add2.setPerson1ntab_sx(p);

?

?? ?????Session session= HibernateUtil.getCurrentSession();

??????? Transaction tx=session.beginTransaction();

//??????? session.save(p);

??????? session.saveOrUpdate(add1);

??????? session.saveOrUpdate(add2);

??????? tx.commit();

??????? HibernateUtil.closeSession();

??? }

}

?

七、測試結果

?

1) :正常保存.

//??????? session.save(p);

??????? session.saveOrUpdate(add1);

??????? session.saveOrUpdate(add2);

?

Hibernate: insert into PERSON_1ntab_sx (name, age) values (?, ?)

Hibernate: insert into ADDRESS_1ntab_sx (addressdetail) values (?)

Hibernate: insert into ADDRESS_1ntab_sx (addressdetail) values (?)

Hibernate: insert into join_1ntab_sx (personid, addressid) values (?, ?)

Hibernate: insert into join_1ntab_sx (personid, addressid) values (?, ?)

?

?

===========================

Hibernate 多對多雙向關聯
一、模型介紹
多個人(Person)對應多個地址(Address)。 一個人可對應多個地址,一個地址也可以對應多個人。
二、實體(省略getter、setter方法)
?
public class Personnn_sx {
private int personid;
private String name;
private int age;
private Set addresses=new HashSet();
public class Addressnn_sx {
private int addressid;
private String addressdetail;
private Set persons = new HashSet();
?
三、表模型
mysql> desc person_nn_sx;
+----------+--------------+------+-----+---------+----------------+
| Field??? | Type???????? | Null | Key | Default | Extra????????? |
+----------+--------------+------+-----+---------+----------------+
| personid | int(11)????? | NO?? | PRI | NULL??? | auto_increment |
| name???? | varchar(255) | YES? |???? | NULL??? |??????????????? |
| age????? | int(11)????? | YES? |???? | NULL??? |??????????????? |
+----------+--------------+------+-----+---------+----------------+
mysql> desc address_nn_sx;
+---------------+--------------+------+-----+---------+----------------+
| Field???????? | Type???????? | Null | Key | Default | Extra????????? |
+---------------+--------------+------+-----+---------+----------------+
| addressid???? | int(11)????? | NO?? | PRI | NULL??? | auto_increment |
| addressdetail | varchar(255) | YES? |???? | NULL??? |??????????????? |
+---------------+--------------+------+-----+---------+----------------+
mysql> desc join_nn_sx;
+-----------+---------+------+-----+---------+-------+
| Field???? | Type??? | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| addressid | int(11) | NO?? | PRI |???????? |?????? |
| personid? | int(11) | NO?? | PRI |???????? |?????? |
+-----------+---------+------+-----+---------+-------+
四、生成的SQL腳本
/* Formatted on 2007/08/22 17:59 (QP5 v5.50) */
CREATE TABLE `address_nn_sx` (
`addressid` int(11) NOT NULL auto_increment,
`addressdetail` varchar(255) default NULL,
PRIMARY KEY? (`addressid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/* Formatted on 2007/08/22 17:59 (QP5 v5.50) */
CREATE TABLE `person_nn_sx` (
`personid` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`age` int(11) default NULL,
PRIMARY KEY? (`personid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/* Formatted on 2007/08/22 17:59 (QP5 v5.50) */
CREATE TABLE `join_nn_sx` (
`addressid` int(11) NOT NULL,
`personid` int(11) NOT NULL,
PRIMARY KEY? (`personid`,`addressid`),
KEY `FK6EBBC5EF6C600921` (`personid`),
KEY `FK6EBBC5EF2A92FF3D` (`addressid`),
CONSTRAINT `FK6EBBC5EF2A92FF3D` FOREIGN KEY (`addressid`) REFERENCES `address_nn_sx` (`addressid`),
CONSTRAINT `FK6EBBC5EF6C600921` FOREIGN KEY (`personid`) REFERENCES `person_nn_sx` (`personid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
五、映射方法
?
<hibernate-mapping>
<class name="com.lavasoft.sx._n_n.Personnn_sx" table="PERSON_nn_sx">
<id name="personid">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<!--映射集合屬性,關聯到持久化類-->
<!--table="join_1ntab_sx"指定了連接表的名字-->
<set name="addresses"
table="join_nn_sx"
cascade="all">
<!--column="personid"指定連接表中關聯當前實體類的列名-->
<key column="personid" not-null="true"/>
<!--column="addressid"是連接表中關聯本實體的外鍵-->
<many-to-many column="addressid"
class="com.lavasoft.sx._n_n.Addressnn_sx"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.lavasoft.sx._n_n.Addressnn_sx"
table="ADDRESS_nn_sx">
<id name="addressid">
<generator class="identity"/>
</id>
<property name="addressdetail"/>
<!--table="join_nn_sx"是雙向多對多的連接表-->
<set name="persons"
inverse="true"
table="join_nn_sx">
<!--column="addressid"是連接表中關聯本實體的外鍵-->
<key column="addressid"/>
<many-to-many column="personid"
class="com.lavasoft.sx._n_n.Personnn_sx"/>
</set>
</class>
</hibernate-mapping>
六、測試方法
public class Test_nn_sx {
public static void main(String[] args){
Addressnn_sx add1=new Addressnn_sx();
Addressnn_sx add2=new Addressnn_sx();
Personnn_sx p1=new Personnn_sx();
Personnn_sx p2=new Personnn_sx();
add1.setAddressdetail("鄭州市經三路");
add2.setAddressdetail("合肥市宿州路");
p1.setName("wang");
p1.setAge(30);
p2.setName("zhang");
p2.setAge(22);
p1.getAddresses().add(add1);
p1.getAddresses().add(add2);
p2.getAddresses().add(add2);
add1.getPersons().add(p1);
add2.getPersons().add(p1);
add2.getPersons().add(p2);
Session session= HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
session.save(p1);
session.save(p2);
//??????? session.saveOrUpdate(add1);
//??????? session.saveOrUpdate(add2);
tx.commit();
HibernateUtil.closeSession();
}
}
七、測試結果
1) :正常保存.
session.save(p1);
session.save(p2);
//??????? session.saveOrUpdate(add1);
//??????? session.saveOrUpdate(add2);
Hibernate: insert into PERSON_nn_sx (name, age) values (?, ?)
Hibernate: insert into ADDRESS_nn_sx (addressdetail) values (?)
Hibernate: insert into ADDRESS_nn_sx (addressdetail) values (?)
Hibernate: insert into PERSON_nn_sx (name, age) values (?, ?)
Hibernate: insert into join_nn_sx (personid, addressid) values (?, ?)
Hibernate: insert into join_nn_sx (personid, addressid) values (?, ?)
Hibernate: insert into join_nn_sx (personid, addressid) values (?, ?)

本文出自 “熔 巖” 博客,轉載請與作者聯系!

?

總結

以上是生活随笔為你收集整理的Hibernate 实体关联关系映射----总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

日韩精品在线视频 | 久久精品官网 | 日韩欧美高清一区二区 | 97夜夜澡人人双人人人喊 | 成人免费观看网站 | 国产日韩中文字幕 | www.97色.com| 在线免费观看的av网站 | 99热官网| www.五月婷 | 亚洲狠狠婷婷 | 日韩中文字 | 最近中文字幕视频网 | 日韩欧美在线第一页 | 亚洲综合色视频在线观看 | 亚洲精品视频在线观看免费视频 | 最近中文字幕mv免费高清在线 | 国产色视频一区二区三区qq号 | 国产手机在线播放 | 激情小说 五月 | 激情五月婷婷丁香 | 成人h在线播放 | 欧美精品免费在线 | 日韩电影在线观看一区 | 在线看成人 | 国产黄色av影视 | 久久久久久看片 | 欧美精品久久久久a | 99资源网 | 欧美一区二视频在线免费观看 | 亚洲一二三区精品 | 色吊丝在线永久观看最新版本 | 97免费中文视频在线观看 | 人人爽人人av | 国产手机在线观看视频 | 婷婷综合导航 | 超碰在线免费福利 | 中文字幕av在线播放 | 精品免费视频123区 午夜久久成人 | 婷婷色在线资源 | 久久久久亚洲精品男人的天堂 | 中文字幕免费高清在线 | 日韩中文字幕免费电影 | 国产精品成人a免费观看 | 亚洲国产一区二区精品专区 | a级国产乱理论片在线观看 特级毛片在线观看 | h文在线观看免费 | 国产视频一区二区在线播放 | 日日干夜夜骑 | 日韩在线视频国产 | 久草在线费播放视频 | 国产日韩精品一区二区三区在线 | 毛片99| 久久久一本精品99久久精品 | 久久精品99久久久久久2456 | 久草视频在线新免费 | 国产精品视频最多的网站 | 天天曰天天 | 国产日韩欧美在线观看 | 成人av电影在线观看 | 成人国产精品久久久久久亚洲 | 91成人精品一区在线播放 | 亚洲毛片在线观看. | 超级av在线| www.午夜视频 | 亚洲综合色婷婷 | 亚洲色影爱久久精品 | 国产精品国产三级国产专区53 | 国产精品孕妇 | 久久99操 | 国产在线观看,日本 | 免费看黄色91 | 久久精品中文字幕免费mv | 免费观看特级毛片 | 日本久久电影网 | 91看片淫黄大片一级在线观看 | 91高清在线看 | 97超碰中文| 国产精品毛片久久蜜 | 国产一区二区三区黄 | 久久激情小视频 | 最近中文字幕视频网 | 色多多视频在线 | 亚洲精品国产精品国 | 亚洲国产精品成人va在线观看 | 国产精品免费看 | 黄色网址a | 久久亚洲在线 | 久久久久久久99精品免费观看 | 亚洲乱码精品 | 一区二区三区韩国免费中文网站 | 日本黄色一级电影 | 狠狠伊人 | 日韩中文字幕免费看 | 久久久久久久毛片 | 欧美一级黄大片 | 国产精品久久久网站 | 精品一区二区免费在线观看 | 一区二区三区四区免费视频 | 99tvdz@gmail.com| 免费成人av网站 | 精品视频网站 | 日韩精品一卡 | 久久久久国产精品一区二区 | 中文字幕a∨在线乱码免费看 | 娇妻呻吟一区二区三区 | 久久久色 | 欧美色图30p | 国产青春久久久国产毛片 | 日本黄网站 | 久久久久免费精品视频 | 亚洲综合视频在线观看 | 久草网免费 | 青青草国产成人99久久 | 18国产精品白浆在线观看免费 | 日日操狠狠干 | 国产一区av在线 | 久热电影 | 色妞色视频一区二区三区四区 | 久久这里 | 欧美精品被 | 91在线视频免费91 | 啪啪免费观看网站 | 国产成人精品亚洲a | 免费在线激情电影 | 免费在线观看一级片 | 91福利国产在线观看 | 午夜电影 电影 | 在线观看亚洲国产精品 | 成人香蕉视频 | 国产婷婷在线观看 | 欧美国产日韩在线视频 | 国产九九热| av最新资源| 最近中文字幕国语免费高清6 | 国产黄色大片 | 免费看色的网站 | www.国产在线 | 97电影院在线观看 | 中文字幕123区 | 黄色三级免费 | 国产精品一区专区欧美日韩 | 97在线视频网站 | 欧美午夜理伦三级在线观看 | 精品免费久久久久久 | 中文字幕亚洲精品在线观看 | 国内一区二区视频 | 在线观看日韩一区 | 欧美黄色免费 | 国产精品11| 久久精品一区二区三区国产主播 | 99日精品| 国产精品一区二区av日韩在线 | 日韩女同一区二区三区在线观看 | 国产精品免费久久久久久久久久中文 | 激情偷乱人伦小说视频在线观看 | sm免费xx网站 | 免费看国产一级片 | 91视频在线| 粉嫩av一区二区三区免费 | 日韩免费成人 | 免费高清在线观看电视网站 | 成人国产一区二区 | 国产精品一区二区三区免费看 | 久久夜色精品国产欧美一区麻豆 | 中文字幕国产视频 | 99国产精品一区二区 | 久热香蕉视频 | 中文字幕在线播放第一页 | 九九爱免费视频在线观看 | 国产精品久久久久久999 | 国产精品自拍av | 国产高清久久久 | 色综合天天色综合 | 亚洲精品乱码久久久久久高潮 | 亚洲电影一级黄 | japanesefreesex中国少妇 | 国产精品欧美激情在线观看 | 久久久久欧美精品999 | 人人要人人澡人人爽人人dvd | 亚洲综合视频在线播放 | 精品国产一区二区三区四区vr | 久久国产精品视频观看 | 在线观看中文字幕网站 | 最新91在线视频 | 久久精品日本啪啪涩涩 | www久久久 | 亚洲最大在线视频 | 91在线视频免费91 | 日韩激情片在线观看 | 99热精品视 | 日韩欧美国产免费播放 | 麻豆一区二区三区视频 | 国产高清第一页 | 国产九九九九九 | 97超碰成人在线 | 人人草在线观看 | 欧美影片| 久久视频网址 | 免费高清国产 | 日韩av一区二区在线影视 | 久久成人18免费网站 | 久久欧美综合 | 久久免费公开视频 | 91经典在线| 91在线精品一区二区 | 国产精品一区二区久久 | 超碰在线网 | 97在线观看视频国产 | 日韩欧美综合 | 成人h电影 | 日韩在线视频不卡 | 91传媒视频在线观看 | 国产录像在线观看 | 久综合网 | 日韩精品视频免费专区在线播放 | 狠狠艹夜夜干 | 国产免费激情久久 | 国产一区免费在线 | 性色av免费观看 | 福利视频第一页 | 久久只精品99品免费久23小说 | 九九精品久久 | 成人在线免费av | 国产在线精品一区二区三区 | 特级黄录像视频 | 三级av黄色| 亚洲精品白浆高清久久久久久 | 视频三区在线 | 午夜10000 | 麻豆国产精品va在线观看不卡 | 亚洲国产精品一区二区久久hs | 欧美性高跟鞋xxxxhd | 综合久久一本 | 欧美坐爱视频 | 免费不卡中文字幕视频 | 人人澡人人草 | 日日夜夜狠狠操 | 黄色av影院 | 久免费| 91av视频在线观看 | 日韩av高清在线观看 | 日韩欧美高清一区二区三区 | 亚洲精品在线二区 | 欧美另类视频 | 五月婷婷网站 | 97在线观看免费观看 | 成人黄色在线电影 | 麻豆视频免费入口 | 中文字幕免费观看 | 国产精品黄色影片导航在线观看 | 美女一区网站 | 不卡的av在线播放 | 99免费精品 | 一区二区视频电影在线观看 | 中文字幕免费观看视频 | 欧美另类交在线观看 | 亚洲免费精品视频 | 在线观看色网 | 亚洲国产操 | 免费看搞黄视频网站 | 精品国产人成亚洲区 | 国产视频亚洲 | 国产成人综合精品 | 日韩,中文字幕 | 免费在线观看黄网站 | 中文字幕在线播放第一页 | 国产精品久久99 | 国产高清中文字幕 | 日韩精品久久一区二区 | 午夜久久久久久久久久影院 | 久久理论电影 | 狠狠操操操 | av线上看| 国产精品18久久久久久久网站 | 五月婷婷六月综合 | 五月婷婷六月丁香激情 | 国产精品一区二区在线播放 | 久久久蜜桃 | 国产天天综合 | 欧美日韩久久一区 | 国产精品久久久精品 | 欧美电影黄色 | 射射射综合网 | 国内综合精品午夜久久资源 | 99视频在线观看视频 | 天天爱天天爽 | 久久99国产综合精品免费 | 五月激情电影 | 国产美腿白丝袜足在线av | av成人黄色 | 久久久久成人精品 | 国产手机视频精品 | 日本性高潮视频 | 欧美国产亚洲精品久久久8v | 色综合久久88色综合天天人守婷 | 色婷婷午夜 | 在线视频区 | 综合色天天 | 中文字幕在线人 | 九九热.com | 中文字幕第一页在线 | 97视频在线观看网址 | 国产真实精品久久二三区 | 久草网视频 | 国产精品毛片一区视频播 | 日韩欧美视频一区二区三区 | 69国产精品视频免费观看 | 9热精品| 成年人三级网站 | 亚洲精品在线观看av | 狠狠的日日 | 国产高清成人在线 | 久久久久久久久影院 | 中字幕视频在线永久在线观看免费 | 国产精品久久久久永久免费观看 | 国产精品国产三级国产不产一地 | 人人看人人爱 | 国产在线观 | 久草在线一免费新视频 | 久久香蕉电影 | 亚洲日本欧美在线 | av免费成人 | 色婷婷亚洲综合 | 美女黄网久久 | 最近中文字幕免费视频 | 国产综合在线视频 | 在线免费观看av网站 | 韩国一区二区av | 97福利在线观看 | 久草在线综合网 | 午夜资源站 | 在线 高清 中文字幕 | av在线电影免费观看 | 久久久久久久国产精品影院 | 国产精品美女久久久久久久久久久 | 国产五月 | 久久国产午夜精品理论片最新版本 | 99在线精品免费视频九九视 | 成人免费视频观看 | 亚洲精品视频二区 | 久久综合狠狠综合久久狠狠色综合 | 欧美ⅹxxxxxx| 色婷婷在线观看视频 | 国产精品中文字幕在线 | 精品国产人成亚洲区 | 国产午夜精品一区二区三区欧美 | 久久免费黄色网址 | 美女网站一区 | 国产精品久久久久久久久久久久午夜片 | 日韩一区二区三区高清在线观看 | 精品国产观看 | 黄av资源 | 精品视频123区在线观看 | 国内精品久久久久 | 国产精品综合久久 | 亚洲国产成人高清精品 | 97视频在线观看免费 | 午夜丰满寂寞少妇精品 | 精品亚洲欧美一区 | 亚洲精品乱码久久久久久按摩 | 国产精品午夜免费福利视频 | 香蕉在线观看视频 | 国产玖玖精品视频 | 欧美精品一区二区蜜臀亚洲 | 国产高清av免费在线观看 | 国产精品免费在线播放 | 久久精品99视频 | 国产一级做a | 久久久久久久久久久久国产精品 | 成 人 黄 色视频免费播放 | 欧美激情视频一区 | 国产一级久久久 | 日韩va在线观看 | 五月天婷婷综合 | 欧美一级片在线 | 亚洲国产成人久久综合 | 免费黄色av片 | 天天插狠狠插 | 色全色在线资源网 | 久在线| 国产精品久久三 | 五月婷婷播播 | 色婷婷亚洲婷婷 | 精品视频国产一区 | 91精品免费看 | 高潮毛片无遮挡高清免费 | 91精品视频在线观看免费 | 欧美一级片免费播放 | 视频一区二区在线观看 | 久久天堂精品视频 | 婷婷精品视频 | 国产精品网站一区二区三区 | 日韩精品一区电影 | 日韩黄色在线电影 | 亚洲伊人成综合网 | 色综合久久久久综合 | 久久国产成人午夜av影院潦草 | 在线观看国产日韩 | 最新国产在线视频 | 成av在线| 综合五月婷婷 | 99精品视频免费 | 亚洲 欧洲av | 免费看的视频 | 久久国产精品精品国产色婷婷 | 国产网站在线免费观看 | 日韩系列在线 | 免费看一级黄色大全 | 日日爽日日操 | 欧美日韩免费观看一区二区三区 | 国产成人精品久 | 免费色婷婷 | 999久久a精品合区久久久 | 久草视频在线观 | 亚洲成人黄 | 亚洲精品福利在线观看 | 91麻豆精品国产91久久久久 | 色婷婷综合五月 | 很污的网站 | 国精产品一二三线999 | 天天操网 | 亚洲精品在 | 欧美日韩三级在线观看 | 久久五月精品 | 99热国产在线中文 | 香蕉精品在线观看 | 国产视频在线观看一区 | 国产 欧美 日韩 | 性日韩欧美在线视频 | 国产精品久久中文字幕 | 亚洲五月 | 亚洲资源在线网 | 一区精品久久 | 国产精品不卡在线播放 | 一级免费片 | 国产一区视频在线观看免费 | 日本不卡一区二区 | 中文字幕av在线电影 | www视频在线免费观看 | 国模精品在线 | 国产黄色看片 | 91手机视频| 黄av在线| 精品国产成人av | 香蕉蜜桃视频 | 日韩av中文字幕在线 | 久久久久久久久久久国产精品 | 中文字幕一区在线观看视频 | 美女久久久久久 | 国产精品久久精品国产 | 亚洲精品美女免费 | 三级黄色在线 | 欧美aaa级片 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 天天躁日日躁狠狠躁av麻豆 | 婷婷丁香社区 | 国产亚洲视频系列 | 一区二区三区四区影院 | 99色亚洲 | 婷婷久久丁香 | 五月花激情 | 97人人模人人爽人人少妇 | sesese图片| 亚洲欧美国产视频 | av中文天堂 | 国产成人av | 亚洲精品视频二区 | 久草在线最新视频 | av韩国在线 | 五月激情亚洲 | 亚洲精品视频网站在线观看 | 91成人天堂久久成人 | 久久精品日产第一区二区三区乱码 | 日日摸日日爽 | 天天综合网天天 | 深爱婷婷 | 婷婷亚洲最大 | 91精品在线视频观看 | 久久综合影视 | 国产伦理久久精品久久久久_ | 天天干天天操人体 | 精品在线视频一区二区三区 | 欧美日韩高清一区二区 | 欧美综合国产 | 热久久视久久精品18亚洲精品 | 日韩在线观看第一页 | 日韩精品影视 | 日韩精品黄 | 在线国产99| 在线观看亚洲精品 | 手机成人免费视频 | 欧美一级视频免费看 | 亚洲欧美国产精品18p | 欧亚久久 | 国产区欧美| 欧美性一级观看 | 国产精品免费在线播放 | 国产亚洲久一区二区 | 免费男女羞羞的视频网站中文字幕 | 欧美午夜激情网 | 婷婷久久一区二区三区 | 五月天九九 | 午夜私人影院久久久久 | www.五月婷婷.com | av看片在线 | 色综合久久久久综合体桃花网 | 2019国产精品 | 国产色视频一区二区三区qq号 | 一区二区三区电影大全 | 欧美精品中文字幕亚洲专区 | 国色天香第二季 | 久久精品牌麻豆国产大山 | 人人草在线视频 | 3d黄动漫免费看 | 亚洲精品视频在线观看视频 | 91麻豆精品国产午夜天堂 | 亚洲精品乱码久久久久v最新版 | 在线观看网站你懂的 | 日韩色av色资源 | 欧美激情精品久久久久久免费 | 美女亚洲精品 | 国产无套精品久久久久久 | 欧美日韩精品在线免费观看 | 91视频国产免费 | 亚洲精品456在线播放乱码 | 久久国产99 | www中文在线 | 免费看v片| 久久久久久久久精 | 国产美女在线精品免费观看 | 亚洲精品在线观看不卡 | 国内精品国产三级国产aⅴ久 | 天天爱综合 | 欧美日韩性视频在线 | 国产裸体bbb视频 | 亚洲日本欧美 | 中文字幕国产 | 国产精品久久久久久久午夜 | 久久久在线观看 | 欧美成人999| 在线观看一级片 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 久久久免费少妇 | 久久国产精品色婷婷 | 精品一区 在线 | 一区二区免费不卡在线 | 欧美特一级 | 国产精品男女啪啪 | 婷婷色伊人 | 成人免费 在线播放 | 国产资源精品在线观看 | 亚洲三级性片 | 欧美国产日韩一区 | 免费网站在线观看成人 | 开心丁香婷婷深爱五月 | 国产成人l区| 国色天香永久免费 | 国产综合片 | 在线观看av中文字幕 | 天天狠狠| 中文字幕久久精品一区 | 亚洲精品高清在线观看 | 国产视频 亚洲精品 | 中文字幕人成一区 | 麻豆国产精品永久免费视频 | 国产成人在线观看免费 | 国产精品久久久久久久午夜片 | 久久久久久国产一区二区三区 | 久久婷婷精品 | 国语久久 | 在线观看免费福利 | 婷婷色网视频在线播放 | 一区二区三区国产欧美 | 精品视频99 | 久久久久免费精品视频 | 亚洲狠狠婷婷 | 最近日本中文字幕a | 人人干在线观看 | 精品国产亚洲在线 | 日韩国产高清在线 | 国产91精品看黄网站 | 免费在线观看日韩欧美 | 亚洲 欧美日韩 国产 中文 | 久久久网 | 女人18毛片a级毛片一区二区 | 国内精品久久久久久久影视麻豆 | 成年人视频免费在线播放 | 亚洲综合色丁香婷婷六月图片 | 久久精品国产久精国产 | 97精品超碰一区二区三区 | 97色婷婷成人综合在线观看 | 中文字幕一区二区三区乱码在线 | 伊人宗合网 | 日日爽天天 | 日日久视频 | av在线播放网址 | 国产玖玖精品视频 | 久久人人爽人人爽人人片av软件 | 色av资源网 | 中日韩欧美精彩视频 | 在线小视频国产 | 国产精品剧情在线亚洲 | 亚洲免费av电影 | 亚洲国产精品久久久久婷婷884 | 黄www在线观看 | 精品国产诱惑 | 久久久久久久久毛片精品 | 欧美日韩国产精品久久 | 欧洲精品码一区二区三区免费看 | 国产美女在线免费观看 | 天天舔天天射天天操 | 永久免费视频国产 | 欧美一级性生活视频 | 国产精品女同一区二区三区久久夜 | 亚洲成人精品av | 99精品国产一区二区三区不卡 | 中文国产字幕在线观看 | 国产精品永久免费观看 | 婷婷综合亚洲 | 黄在线免费观看 | 91免费网 | 国产午夜在线 | 国产一区在线播放 | 99精品久久久久久久久久综合 | 亚洲国产精品小视频 | 亚州精品在线视频 | 高清不卡免费视频 | 9热精品 | 久久久久久国产精品久久 | 亚洲精品在线观看视频 | 国产精品一区二区在线免费观看 | 国产91九色视频 | 黄色三级免费网址 | 久久99国产精品 | 精品国产99| 亚洲精品美女在线观看播放 | 亚洲精品1234区 | 在线看中文字幕 | 91在线九色| 99视频在线免费 | 韩国一区二区三区视频 | 日韩欧美大片免费观看 | 成年人精品 | 久视频在线播放 | 黄污污网站| 激情五月激情综合网 | 91桃色在线播放 | 国产在线91在线电影 | 欧美成人xxxxx | 日韩精品久久一区二区三区 | 在线午夜av | 成人小视频在线观看免费 | 欧美巨乳波霸 | 久久久人 | 天天干,天天射,天天操,天天摸 | 在线看的av网站 | 欧美午夜性 | 波多野结衣在线观看视频 | 久久在线观看 | 在线视频区 | 久久精品一二三 | 成人a v视频 | 久草在线久草在线2 | 欧美精品xx | 久久国产电影院 | 在线99热 | 欧美日韩视频一区二区 | 中文字幕文字幕一区二区 | 久久影视精品 | 91免费看黄 | 国产精品高清免费在线观看 | 97av视频在线观看 | 久草在线免费看视频 | 久久伦理网 | 婷五月激情 | 成人h视频在线 | 日韩欧三级| 日韩欧美在线免费观看 | 人人爽人人爽人人爽 | 久久精品精品电影网 | 一区二区不卡视频在线观看 | 麻豆影视网站 | 亚洲九九精品 | 久久免费影院 | 亚洲视频在线观看 | 国产美女主播精品一区二区三区 | 97在线免费视频观看 | 五月激情电影 | 国产精品免费一区二区三区在线观看 | 成人av av在线 | 激情五月婷婷综合网 | 免费大片黄在线 | 国产一区国产二区在线观看 | 久草久草在线 | 免费看一级片 | 国产色道 | 人人插人人草 | 免费一级特黄录像 | 日本精品视频一区 | 玖玖玖影院 | 欧美在线日韩在线 | 久久精精品视频 | 欧美精品小视频 | 99精品热| 色综合天天狠天天透天天伊人 | 综合国产视频 | 精品国产一区二区三区日日嗨 | 中文字幕一区二区三区四区 | 天天干天天在线 | 久久视频网 | av一区二区在线观看中文字幕 | 天天激情在线 | 亚洲激情视频 | av天天在线观看 | 黄色三级视频片 | 欧美精品一区在线 | av在线免费在线观看 | 最新日韩在线观看视频 | 91免费的视频在线播放 | 亚洲爱视频 | 三日本三级少妇三级99 | 92中文资源在线 | 久久色视频 | 在线国产专区 | 天天天操操操 | 中文字幕乱码在线播放 | 97视频亚洲 | 天天爽天天做 | 免费看成年人 | 国产精品一区二区果冻传媒 | 色插综合 | 亚洲手机av | 夜夜躁天天躁很躁波 | 国产精品1区2区3区 久久免费视频7 | 久久九九免费 | 片网址 | 麻豆你懂的 | 中文字幕高清在线播放 | 亚洲国产免费网站 | 免费观看一级成人毛片 | 在线观看视频在线 | 亚洲欧洲av | 亚洲视频 在线观看 | 激情久久一区二区三区 | 国产视频精品免费 | 91在线看| 久久婷婷一区 | 久久手机免费观看 | 国产福利在线免费观看 | 少妇bbbb | 欧美日韩精品电影 | www久久99 | 国产精品原创av片国产免费 | 五月天av在线 | 91字幕| 亚洲精品高清视频在线观看 | 国产精品成人av在线 | 69夜色精品国产69乱 | 日本视频网 | 国产正在播放 | 天天干,天天射,天天操,天天摸 | 中文字幕免费观看视频 | 欧美精品999 | 久久久精品国产免费观看一区二区 | 国产在线2020 | 波多野结衣在线中文字幕 | 国产精品高潮呻吟久久av无 | 特级a老妇做爰全过程 | 国产小视频网站 | 国产黄色片网站 | 亚洲aⅴ免费在线观看 | 成人免费在线观看入口 | 五月激情片| 成人免费观看网址 | 久久这里只有精品1 | 日韩精品一区二区三区电影 | 激情综合网色播五月 | 中文网丁香综合网 | 又黄又刺激的视频 | 日韩久久久久久久久 | 久草精品视频在线播放 | 五月天六月婷 | 91久久精品一区二区三区 | 黄色毛片视频免费观看中文 | 精品视频在线视频 | 91av电影网| 亚洲精品国产精品国自产 | 日韩v在线 | 亚洲国产网址 | 国产区第一页 | av高清不卡 | 国产在线自 | 夜夜骑天天操 | 欧美精选一区二区三区 | 日韩毛片精品 | 亚洲人成网站精品片在线观看 | 最新国产中文字幕 | mm1313亚洲精品国产 | 欧美做受高潮 | 国产精品高清在线观看 | 精品极品在线 | 五月激情五月激情 | 久草视频在线看 | 一本一本久久a久久精品综合妖精 | 久久亚洲二区 | 久久尤物电影视频在线观看 | 久久成人高清 | 欧美精品一区在线发布 | 99超碰在线观看 | 久久试看 | 色99之美女主播在线视频 | 亚洲精品视频在线播放 | 99国产一区二区三精品乱码 | 国产精品久久久久久久久久新婚 | 激情欧美国产 | 福利视频网站 | 日本不卡123区 | 在线免费91 | 亚洲精品国产欧美在线观看 | 国产区在线看 | 日本女人在线观看 | 日韩免费观看高清 | 91亚洲精品国偷拍 | 亚洲精品乱码久久久久久蜜桃欧美 | 精品日韩在线一区 | 99久久成人| 91大神一区二区三区 | 国产精品网址在线观看 | 国产无遮挡又黄又爽在线观看 | 亚洲一级免费电影 | 69亚洲乱 | 天天射一射 | 成人网在线免费视频 | a在线一区| 久久国产露脸精品国产 | 久久国产电影院 | 日韩 精品 一区 国产 麻豆 | 91精品国产91久久久久久三级 | 日韩在线视频在线观看 | 91污视频在线 | 中文字幕免费观看 | 中文字幕中文字幕在线中文字幕三区 | 久久免费的视频 | 日韩欧美国产免费播放 | av青草| 国产视频一区在线播放 | 麻豆国产精品va在线观看不卡 | 天天激情天天干 | 国产亚洲精品xxoo | 国产精品video爽爽爽爽 | 日本精品久久久久 | 日韩va在线观看 | japanesexxxhd奶水| 国产91在线免费视频 | 手机在线看片日韩 | 免费在线观看不卡av | 亚洲jizzjizz日本少妇 | 精品免费一区二区三区 | av中文字幕网站 | 欧美va天堂va视频va在线 | 国产成人区 | 国产精品午夜在线 | 伊人电影在线观看 | 久久成人久久 | 亚洲国产精品久久久 | 91九色蝌蚪视频 | 日韩在线中文字幕视频 | 伊人中文网 | 超黄视频网站 | 亚洲黄色区| 亚洲精选在线观看 | 色网站在线看 | 午夜久久久久久久久久久 | 日日夜夜精品网站 | 韩国av三级 | 欧美国产一区在线 | 又黄又爽又无遮挡的视频 | 国产精品夜夜夜一区二区三区尤 | 91欧美视频网站 | 热久久免费国产视频 | 91成人在线视频观看 | 韩国av一区二区三区 | 久久久高清一区二区三区 | 亚洲精品午夜一区人人爽 | 亚洲一级黄色大片 | 伊人天堂av | wwwwww色| 亚洲狠狠干 | 国产精品中文字幕在线观看 | 在线观看av免费 | 色婷婷av国产精品 | 欧美地下肉体性派对 | 91探花视频| 亚洲精品美女久久久久网站 | 国产午夜精品在线 | 精品久久久久久亚洲综合网 | 国产999视频在线观看 | 精品一二三四在线 | 精品一区二区在线观看 | 亚洲国产一区二区精品专区 | 久久久国际精品 | 伊人狠狠色 | 午夜精品久久久久久久99无限制 | av大全免费在线观看 | 成人av亚洲 | 久久99久久久久久 | 欧美激情综合五月色丁香 | 色97在线 | 亚洲人人av| 成人中心免费视频 | 国产又粗又猛又黄又爽的视频 | 欧美日韩国语 | 色黄久久久久久 | 久久精品久久久久电影 | 91高清完整版在线观看 | a黄色片在线观看 | 成人羞羞视频在线观看免费 | 国产精品久久久久久超碰 | 久久成人午夜视频 | 91完整版 | 婷五月激情| 中文字幕av全部资源www中文字幕在线观看 | 中文字幕免费高清在线 | 久久艹99 | 亚洲aⅴ乱码精品成人区 | 久久精品女人毛片国产 | 成人影片在线播放 | 91麻豆免费看 | 日韩在线影视 | 精品在线免费视频 | www.99av| 成人av在线一区二区 | 欧美午夜a | 国产精品久久久久久av | 国产精品免费在线观看视频 | 亚洲视频在线视频 | 成 人 黄 色 视频 免费观看 | 激情网五月天 | 久久综合久久综合九色 | 四虎影院在线观看av | 欧美精品久久99 | 久久精品999 | 欧美最猛性xxxxx(亚洲精品) | 一级片视频在线 | av成人资源 | 中文字幕无吗 | 日韩黄在线观看 | 深夜福利视频一区二区 | 黄色性av | 日韩免费福利 | 久久一区二区三区日韩 | 日本久久久久久科技有限公司 | 久久精品视频国产 | 久久精品三| 99欧美| 在线观看免费观看在线91 | 天天天天色综合 | 亚洲高清av在线 | av888.com| 麻豆视频在线看 | 欧美成人按摩 | 五月婷婷黄色网 | 天天草天天干天天射 | 久久a热6| 日韩中文在线播放 | 99精品视频在线 | 久久高清免费视频 | 欧美日韩精品国产 | 国产精品自产拍在线观看网站 | 青青草视频精品 | 在线观看视频99 | 中文字幕在线免费观看 | 日韩视频一区二区在线观看 | 人人看人人爱 | 国产一区自拍视频 | 亚洲成人一二三 | 美女久久久久久久久久久 | 亚洲综合视频在线 | 99免费在线播放99久久免费 | 久久久久9999亚洲精品 | 麻豆国产在线播放 | 99久久精品久久亚洲精品 | 精品免费观看视频 | 天天射综合网站 | 99免费在线播放99久久免费 | 国产丝袜高跟 | 国产精国产精品 | 日日夜夜中文字幕 | 欧美日韩一区二区三区在线观看视频 | 天天射综合网视频 | 99久久99久久精品免费 | 国产精品女 | 亚洲精品影院在线观看 | 国产精品99久久久久久久久久久久 | 香蕉网在线观看 | 国产精品久久久久9999 | 在线观看深夜视频 |