hibernate 之 关联映射的基于外键的单向一对一映射

1. 人和身份证是一个一对一的关系,他们的表结构为:

2. 类结构:IdCard.java :

public class IdCard {
    private String id;
    private String address;
    public IdCard() {
    }
    public IdCard(String id, String address) {
        super();
        this.id = id;
        this.address = address;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}

person.java :

public class Person {
    private int id;
    private String name;
    private int age;
    private IdCard idCard;
    public Person() {
    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    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 int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public IdCard getIdCard() {
        return idCard;
    }
    public void setIdCard(IdCard idCard) {
        this.idCard = idCard;
    }

}

3. 映射文件:IdCard.hbm.xml :

<hibernate-mapping>
    <class name="cn.wh.vo.IdCard" table="t_idCard">
        <id name="id">
            <generator class="assigned"></generator>
        </id>
        <property name="address"/>
    </class>
</hibernate-mapping>

Person.hbm.xml :

<hibernate-mapping>
    <class name="cn.wh.vo.Person" table="t_person">
        <id name="id">
            <generator class="native"></generator>
        </id>
        <property name="name"/>
        <property name="age"/>
        <!-- 配置基于外键的一对一的关联映射
            和多对一映射几乎一致,需要设置unique=true
         -->
        <many-to-one name="idCard" column="idCardId" unique="true"/>
    </class>
</hibernate-mapping>

4. 测试:

public class HibernateTest {
    private Session session=null;
    @Before
    public void setUp(){
        session = HibernateUtil.getSession();
    }
    @After
    public void tearDown(){
        HibernateUtil.close();
    }
    @Test
    public void testCreateDB(){
        Configuration cfg = new Configuration().configure();
        SchemaExport export = new SchemaExport(cfg);
        //第一个参数  是否打印  数据库脚本
        //第二个参数 是否将脚本导入数据库执行
        export.create(true, true);
    }
    @Test
    public void testInit(){
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            IdCard card1 = new IdCard("1101","北京昌平");
            IdCard card2 = new IdCard("1102", "北京海淀");
            Person p1 = new Person("张三",22);
            p1.setIdCard(card1);
            Person p2 = new Person("李四",23);
            p2.setIdCard(card2);

            session.save(card1);
            session.save(card2);
            session.save(p1);
            session.save(p2);

            tx.commit();

        } catch (Exception e) {
            if(tx!=null)
                tx.rollback();
        }
    }
    @Test
    public void testGet(){
        Person p1 = (Person)session.get(Person.class, 1);
        System.out.println(p1.getName()+"---"+p1.getAge()+"----"+p1.getIdCard().getAddress());
    }

}
时间: 2024-10-22 04:05:14

hibernate 之 关联映射的基于外键的单向一对一映射的相关文章

hibernate 之 关联映射的基于外键的双向一对一关联

1. 人和身份证是一个一对一的关系,他们的表结构为: 2. 类结构:Person.java public class Person { private int id; private String name; private int age; private IdCard idCard; public Person() { } public Person(String name, int age) { super(); this.name = name; this.age = age; } pu

Hibernate关系映射(一) 基于外键的单向一对一

模拟用户和地址的映射关系,一个用户只有一个地址,用户知道地址,但是地址不知道用户.用户对地址的单向一对一映射. 一.建立实体类 Account.cs类 package com.lxit.entity; import java.io.Serializable; public class Account implements Serializable{ public Account(){ } private int id; private String name; private String pa

java之hibernate之基于外键的双向一对一关联映射

这篇讲解 基于外键的双向一对一关联映射 1.考察如下信息,人和身份证之间是一个一对一的关系.表的设计 2.类结构 Person.java public class Person implements Serializable{ private int id; private String name; private IdCard idCard; public Person() { } public Person(String name) { super(); this.name = name;

Hibernate关系映射(二) 基于外键的双向一对一

基于外键的双向一对一关联映射 需要在一端添加<one-to-one>标签,用property-ref来指定反向属性引用. 还是通过刚才用户和地址来演示双向一对一关联. 代码演示 一.实体类 Account.cs,需要添加被控端的引用 package com.lxit.entity; import java.io.Serializable; public class Account implements Serializable{ public Account(){ } private int

Hibernate(八):基于外键映射的1-1关联关系

背景: 一个部门只有一个一把手,这在程序开发中就会设计数据映射应该设置为一对一关联. 在hibernate代码开发中,实现这个业务有两种方案: 1)基于外键映射的1-1关联: 2)基于主键映射的1-1关联. 本篇文章主要是用来学习如何使用外键实现1-1关联关系. 新建项目hibernate05 新建java project,引入依赖包,在src下添加hibernate.cfg.xml 1 <?xml version="1.0" encoding="UTF-8"

hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同

基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化类的主键生成主键的实体的映射文件 首先需要指定主键生成方式为foreigner 格式为: <id name="departmentId" type="java.lang.Integer"> <column name="department_i

注解:【基于外键的】Hibernate单向1-&gt;1关联

Person与Address关联:单向1->1,[基于外键的] Person.java package org.crazyit.app.domain; import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Generati

Entity Framework - 基于外键关联的单向一对一关系

代码的世界,原以为世界关系很简单,确道是关系无处不在.NET世界里ORM框架中EntityFramework作为其中翘楚,大大解放了搬砖工作的重复工作,着实提高了不少生产力,而也碰到过不少问题!比如关系的映射! 一对一关系的映射: 用户账户密码信息表:包含用户名 密码 邮箱等账户登录时的信息 public class SystemAccount { public SystemAccount() { Id = DateUtils.GeneratedNewGuid(); } public Guid

Hibernate_8_Person和IdCard实例_一对一关系:基于外键

1)建立Person类: public class Person { private Integer id; private String name; private IdCard IdCard; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId