您的位置:首页 > 其它

Hibernate关联之 一对一连接表双向关联

2015-08-28 15:29 295 查看
Hibernate
一对一连接表双向关联

[align=left] [/align]
[align=left]一、模型介绍[/align]
[align=left] [/align]
[align=left]一个人(Person)对应一个地址(Address)。[/align]
[align=left] [/align]
[align=left]二、实体(省略getter、setter方法)[/align]
[align=left][/align]
[align=left]public class Person11tabboth {[/align]
[align=left] private int personid;[/align]
[align=left] private String name;[/align]
[align=left] private int age;[/align]
[align=left] private Address11tabboth address11tabboth;[/align]
[align=left] [/align]
[align=left]public class Address11tabboth{[/align]
[align=left] private int addressid;[/align]
[align=left] private String addressdetail;[/align]
[align=left] private Person11tabboth person11tabboth;[/align]
[align=left][/align]
[align=left]三、表模型[/align]
[align=left] [/align]
[align=left]mysql> desc person_11tabboth;[/align]
[align=left]+----------+--------------+------+-----+---------+----------------+[/align]
[align=left]| Field | Type | Null | Key | Default | Extra |[/align]
[align=left]+----------+--------------+------+-----+---------+----------------+[/align]
[align=left]| personid | int(11) | NO | PRI | NULL | auto_increment |[/align]
[align=left]| name | varchar(255) | YES | | NULL | |[/align]
[align=left]| age | int(11) | YES | | NULL | |[/align]
[align=left]+----------+--------------+------+-----+---------+----------------+[/align]
[align=left] [/align]

[align=left]mysql> desc join_11tabboth;[/align]
[align=left]+-----------+---------+------+-----+---------+-------+[/align]
[align=left]| Field | Type | Null | Key | Default | Extra |[/align]
[align=left]+-----------+---------+------+-----+---------+-------+[/align]
[align=left]| addressid | int(11) | NO | UNI | | |[/align]
[align=left]| personid | int(11) | NO | PRI | | |[/align]
[align=left]+-----------+---------+------+-----+---------+-------+[/align]
[align=left] [/align]
[align=left]mysql> desc address_11tabboth;[/align]
[align=left]+---------------+--------------+------+-----+---------+----------------+[/align]
[align=left]| Field | Type | Null | Key | Default | Extra |[/align]
[align=left]+---------------+--------------+------+-----+---------+----------------+[/align]
[align=left]| addressid | int(11) | NO | PRI | NULL | auto_increment |[/align]
[align=left]| addressdetail | varchar(255) | YES | | NULL | |[/align]
[align=left]+---------------+--------------+------+-----+---------+----------------+[/align]
[align=left] [/align]
[align=left]四、生成的SQL脚本[/align]
[align=left] [/align]
[align=left]/* Formatted on 2007/08/22 17:35 (QP5 v5.50) */[/align]
[align=left]CREATE TABLE `person_11tabboth` ([/align]
[align=left] `personid` int(11) NOT NULL auto_increment,[/align]
[align=left] `name` varchar(255) default NULL,[/align]
[align=left] `age` int(11) default NULL,[/align]
[align=left] PRIMARY KEY (`personid`)[/align]
[align=left]) ENGINE=InnoDB DEFAULT CHARSET=gbk;[/align]
[align=left] [/align]
[align=left]/* Formatted on 2007/08/22 17:34 (QP5 v5.50) */[/align]
[align=left]CREATE TABLE `address_11tabboth` ([/align]
[align=left] `addressid` int(11) NOT NULL auto_increment,[/align]
[align=left] `addressdetail` varchar(255) default NULL,[/align]
[align=left] PRIMARY KEY (`addressid`)[/align]
[align=left]) ENGINE=InnoDB DEFAULT CHARSET=gbk;[/align]
[align=left] [/align]
/* Formatted on 2007/08/22 18:35 (QP5 v5.50) */

CREATE TABLE `join_11tabboth` (

`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;
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]五、映射方法[/align]
[align=left] [/align]
[align=left]OneToOneTabBothPerson.hbm.xml[/align]
<hibernate-mapping>

<class name="com.bean.Person11tabboth" table="PERSON_11tabboth">

<id name="personid">

<generator class="identity"/>

</id>

<property name="name"/>

<property name="age"/>

<join table="join_11tabboth" optional="true">

<key column="personid" unique="true"/>

<many-to-one name="address11tabboth" column="addressid" not-null="true" unique="true"/>

</join>

</class>

</hibernate-mapping>


OneToOneTabBothAddress.hbm.xml
<hibernate-mapping>

<class name="com.bean.Address11tabboth" table="ADDRESS_11tabboth">

<id name="addressid">

<generator class="identity"/>

</id>

<property name="addressdetail"/>

<join table="join_11tabboth" inverse="true" optional="true" >

<key column="addressid" unique="true"/>

<many-to-one name="person11tabboth" column="personid" not-null="true" unique="true"/>

</join>

</class>

</hibernate-mapping>


六、测试
public class Test_11tabboth {
@Test
public void test_11tabboth(){

Address11tabboth add = new Address11tabboth();
add.setAddressdetail("天津市南开区");

Person11tabboth p = new Person11tabboth();

p.setName("cy");
p.setAge(26);

add.setPerson11tabboth(p);
p.setAddress11tabboth(add);

Session session = HibernateUtil.getCurrentSession();
Transaction tx = session.beginTransaction();
session.saveOrUpdate(p);
session.saveOrUpdate(add);
tx.commit();
HibernateUtil.closeSession();

}

}


[align=left] [/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: