Hibernate关联之 一对多外键单向关联
2015-08-28 14:55
302 查看
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的集合,即可形成一对多关系。 |
<hibernate-mapping> <class name="com.bean.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" inverse="true" cascade="all" > <!--确定关联的外键列--> <key column="personid"/> <!--用以映射到关联类属性--> <one-to-many class="com.bean.Address1nfk"/> </set> </class> </hibernate-mapping>
OneToManyFKAddress.hbm.xml
<hibernate-mapping> <class name="com.bean.Address1nfk" table="ADDRESS_1nfk"> <id name="addressid"> <generator class="identity"/> </id> <property name="addressdetail"/> </class> </hibernate-mapping>
[align=left]六、测试方法[/align] |
[align=left] [/align] |
public class Test_1nfk { public static void main(String[] args){ Person1nfk p=new Person1nfk(); p.setName("lee"); p.setAge(30); Address1nfk add1=new Address1nfk(); Address1nfk add2=new Address1nfk(); add1.setAddressdetail("大连市"); add2.setAddressdetail("哈尔滨市群力"); 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(); } }
相关文章推荐
- 一个圆形进度条
- [转]NSIS常用代码整理
- IOS 数据库操作
- HBase之表的设计原则
- NOIP2015模拟1
- 值类型与引用类型(C#)
- JSON语法-对对象的简单定义
- 面试题:查询部门工资排前三的员工信息
- 20150828实例
- 值类型与引用类型(C#)
- 案例:看OA如何攻克政府公文管理“多、细、繁、急”4大痛楚
- 自定义数字键盘(固定button键盘)
- 点击文字链接提交Form表单
- 《深入理解计算机系统》读书笔记1---计算机系统漫游
- mysqladmin命令记忆
- 用C++实现一元多项式的四则运算包括数据的文件导入与导出
- 类似ipad上的split,左边的tableview控制右边显示不同的视图
- 安装MongoDB遇到问题
- 编写一个函数,把一个char组成的字符串循环右移n位
- Activiti流程变量(五)