Hibernate基于主键的一对一映射关系

来源:互联网 发布:相遇网络 歌曲 编辑:程序博客网 时间:2024/04/29 04:03

<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 主键的外键,也是表的主键







0 0