Hibernate基于主键的一对一映射关系
2015-10-30 11:00
337 查看
<strong><span style="font-size:18px;"><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Hibernate中,一对一的映射关系有两种,一种是基于外键的一种是基于外键的,下面我来介绍一中基于主键的方式</span></span></strong>
首先创建两个实体类Person和IdCard,添加属性,生成相应的getter和setter方法。
然后就是Person.hbm.xml和IdCard.hbm.xml两个映射文件。
由于我把外键放到IdCard方,所以IdCard.hbm.xml做如下配置
<strong><span style="font-size:18px;"><?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.seven.domain"> <class name="IdCard" table="t_idCard"> <!-- 主键 --> <id name="id" column="id"> <generator class="foreign"> <param name="property">person</param> </generator> </id> <property name="number"/> <!-- person属性,本方有外键 --> <one-to-one name="person" class="Person" constrained="true"></one-to-one> </class> </hibernate-mapping></span></strong>有外键方的主键生成策略一定要是foregin,然后加参数property,值为关联的对方的属性,这里是person
没有外键方的Person.hbm.xml配置如下
<strong><span style="font-size:18px;"><?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.seven.domain"> <class name="Person" table="t_person"> <!-- 主键 --> <id name="id" column="id"> <generator class="native"/> </id> <property name="name"/> <!-- idCard属性,本方无外键 --> <one-to-one name="idCard" class="IdCard"></one-to-one> </class> </hibernate-mapping></span></strong>最后写一个测试类来测试下保存数据,代码如下
<strong><span style="font-size:18px;">package com.seven.domain; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.Test; public class App { private static SessionFactory sessionFactory = new Configuration() .configure()// .addClass(IdCard.class)// .addClass(Person.class)// .buildSessionFactory(); @Test public void testSave(){ Session session = sessionFactory.openSession(); session.beginTransaction(); Person person = new Person(); person.setName("lkk"); IdCard idCard = new IdCard(); idCard.setNumber("32321321321"); //关联 person.setIdCard(idCard); idCard.setPerson(person); //保存 session.save(person); session.save(idCard); session.getTransaction().commit(); session.close(); } }</span></strong>最后在数据库中生成数据两个表
其中t_person 表中有一个主键和name字段,无外外键
t_idcard表中有一个引用t_person 主键的外键,也是表的主键
相关文章推荐
- 已经是GBK编码的Eclipse写的项目 如何转到UTF8而不乱码
- 开源还是商用?十大云运维监控工具横评
- 禁止UITextField的粘贴功能
- Java学习之面向对象三大特征通俗理解
- java 遍历arrayList的四种方法
- 判断知道的 service 是否在运行
- linux wc统计
- 终止正在执行的线程
- ibatis中CDATA的使用
- Fragment——startActivityForResult后onActivityResult无反应之问题总结
- 技术牛人到管理牛人的蜕变
- nginx安装和配置
- pdf在线浏览的一些设置
- Spring4+SpringMVC+Hibernate4+MySQL5项目搭建
- 任意修改网页内容JS代码
- C# Dictionary 的几种遍历方法<转>
- Jquery 文档的各种高度和宽度
- localhost 与 127.0.0.1 的区别
- JPA学习笔记-二级缓存
- 如何把老旧笔记本变成一部 Chromebook