Hibernate关联之 一对多外键双向关联
2015-08-28 15:33
330 查看
Hibernate 一对多外键双向关联 |
一、模型介绍 |
一个人(Person)对应多个地址(Address)。 |
二、实体(省略getter、setter方法) |
public class Person1nfkboth implements Serializable { |
private int personid; |
private String name; |
private int age; |
private Set addresses=new HashSet(); |
public class Address1nfkboth implements Serializable { |
private int addressid; |
private String addressdetail; |
private Person1nfkboth person1nfkboth; |
三、表模型 |
mysql> desc person_1nfkboth; |
+----------+--------------+------+-----+---------+----------------+ |
| 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_1nfkboth; |
+---------------+--------------+------+-----+---------+----------------+ |
| 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_1nfkboth` ( |
`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_1nfkboth` ( |
`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.bean.Person1nfkboth" table="PERSON_1nfkboth"> <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.bean.Address1nfkboth"/> </set> </class> </hibernate-mapping>
OneToManyFKBothAddress.hbm.xml
<hibernate-mapping> <class name="com.bean.Address1nfkboth" table="ADDRESS_1nfkboth"> <id name="addressid"> <generator class="identity"/> </id> <property name="addressdetail"/> <!--映射关联属性,column属性指定外键列名--> <many-to-one name="person1nfkboth" class="com.bean.Person1nfkboth" fetch="select" cascade="save-update"> <column name="personid" not-null="true"/> </many-to-one> </class> </hibernate-mapping>
六、测试
public class Test_1nfkboth { @Test public void test_1nfkboth(){ Address1nfkboth add1 = new Address1nfkboth(); Address1nfkboth add2 = new Address1nfkboth(); Person1nfkboth p = new Person1nfkboth(); add1.setAddressdetail("郑州市经三路"); add2.setAddressdetail("合肥市宿州路"); p.setName("liu"); p.setAge(26); p.getAddresses().add(add1); p.getAddresses().add(add2); add1.setPerson1nfkboth(p); add2.setPerson1nfkboth(p); Session session = HibernateUtil.getCurrentSession(); Transaction tx = session.beginTransaction(); session.save(p); session.saveOrUpdate(add1); session.saveOrUpdate(add2); tx.commit(); HibernateUtil.closeSession(); } }
相关文章推荐
- 洗衣机控制系统 VHDL语言 状态机实现
- CLRS第四章思考题
- java问题诊断
- RHCE学习笔记之yum
- jQuery实现多级下拉菜单jDropMenu的方法
- Django form 实现文件上传
- Django form 实现文件上传
- Oracle使用并行的坑
- Unity打包xcode工程编译错误及解决方法
- hdu4763 Theme Section(KMP水题)
- 华为OJ(坐标移动)
- java实现ping ip地址
- zzuli OJ 1013: 求两点间距离
- ubuntu上安装mysql以及简单实验
- oracle 定时job
- Spring定时任务
- UE使用
- svn
- 调用webservice的方式解析
- 随笔小录