Hibernate 双向一对一关联
2016-04-13 11:21
274 查看
本文只介绍实际开发中常用的设计模式(双向一对一关联)
其原理只是多对一的一种特例,只需增加一个unique="true"
下面看代码:
2个实体测试类:Man和Woman;理解为(一个男人可以娶一个女人,一个女人嫁一个男人)
Woman类:
再看配置文件:
其原理只是多对一的一种特例,只需增加一个unique="true"
下面看代码:
2个实体测试类:Man和Woman;理解为(一个男人可以娶一个女人,一个女人嫁一个男人)
package ray.one2one; public class Man { private int id; private String name; private Woman woman; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Woman getWoman() { return woman; } public void setWoman(Woman woman) { this.woman = woman; } }
Woman类:
package ray.one2one; public class Woman { private int id; private String name; private Man man; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Man getMan() { return man; } public void setMan(Man man) { this.man = man; } }要点:Man和Woman各自维护一个引用对象,互相指向一个对象
再看配置文件:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="ray.one2one"> <class name="Man" table="_man" lazy="true"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <!-- 双向一对一关联, property-ref指明在关联类必须有Man类的man属性的get和set --> <!-- 单向一对一则不需要此属性 --> <one-to-one name="woman" class="Woman" property-ref="man" cascade="all"></one-to-one> </class> </hibernate-mapping>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="ray.one2one"> <class name="Woman" table="_woman" lazy="true"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <!-- 双向一对一外键关联--> <many-to-one name="man" unique="true" column="m_id" cascade="all"></many-to-one> </class> </hibernate-mapping>最后看下测试类代码:
package ray.one2one; import org.hibernate.Session; import ray.SessionUtil.HibernateSessionFactory; public class Test { public static void main(String[] args) { Woman woman = new Woman(); woman.setName("文苹"); Man man = new Man(); man.setName("雷盼"); man.setWoman(woman); woman.setMan(man); Session session = HibernateSessionFactory.getSession(); session.beginTransaction(); session.save(woman); session.getTransaction().commit(); session.close(); } }输出结果:
Hibernate: alter table _woman add index FK_gxnyefreb964vdnbshbbmreou (m_id), add constraint FK_gxnyefreb964vdnbshbbmreou foreign key (m_id) references _man (id)
Hibernate: insert into _man (name) values (?) Hibernate: insert into _woman (name, m_id) values (?, ?)
相关文章推荐
- 三维建模与飞行仿真技术,期待与您交流及合作
- 编译CDH Spark源代码
- ViewStub用法
- iOS开发之触摸事件
- 山东省第四届ACM大学生程序设计竞赛-Alice and Bob(二进制&&找规律)
- hdu5662 YJQQQAQ and the function (单调栈)
- 4/13 发布到线上遇到的路径问题
- Asp.net mvc 强类型View
- 【Android】studio中9patch图片只能放在drawable中,不能放mipmap中
- tomcat Server Locations 不可用 两种解决方式
- HDFS源码分析数据块复制之PendingReplicationBlocks
- 六种单例模式
- HTML页面中启动Activity
- ubuntu 生成 .pem 证书连接服务器,取消OpenSSH密钥密码认证
- Unity 控制物体绕x,y,z 轴旋转
- uboot的relocation原理详细分析
- NOI主计划
- Android应用程序文件组成
- Python yield与实现
- leetcode: 链表2