hibernate一对一详解

IdCard.hbm.xml

<?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.hibernate.c_onetoone">

    <class name="IdCard" table="t_card">
    <id name="id"  >
         <generator class="native"/>
    </id>
        <property name="number"/>
        <many-to-one name="person" class="Person" column="pserson_id" unique="true"></many-to-one>
    </class>

</hibernate-mapping>

1、一对一关系中存在两张表,id card表有外键,所以使用many-to-one 来对应

2、指定class,外键名称column="pserson_id",唯一性unique="true"

------------------------------------

Person.hbm.xml

<?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.hibernate.c_onetoone">

    <class name="Person" table="t_person">
    <id name="id"  >
         <generator class="native"/>
    </id>
        <property name="name"/>
        <one-to-one name="idCard" ></one-to-one>
    </class>

</hibernate-mapping>

1、一对一关系使用one-to-one 因为这张表无外键

---------------------------------------

Person.java

public class Person {
    int id;
    String name;
    IdCard idCard;
    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 IdCard getIdCard() {
        return idCard;
    }
    public void setIdCard(IdCard idCard) {
        this.idCard = idCard;
    }
    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + "]";
    }

}

IdCard.java

public class IdCard {
    int id;
    String number;
    Person person;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public Person getPerson() {
        return person;
    }
    public void setPerson(Person person) {
        this.person = person;
    }
    @Override
    public String toString() {
        return "IdCard [id=" + id + ", number=" + number + "]";
    }
}

app.java:

public class APP {
    static SessionFactory sessionFactory=null;
    static{
        sessionFactory =new Configuration().configure().addClass(Person.class).addClass(IdCard.class).buildSessionFactory();
    }
    @Test
    public void setApp() {
        Session sess= sessionFactory.openSession();
        Transaction ts=null;
        //
        ts=sess.beginTransaction();
        Person person1=new Person();
        person1.setName("p1");
        IdCard idCard1=new IdCard();
        idCard1.setNumber("000001");
        Person person2=new Person();
        person2.setName("p2");
        IdCard idCard2=new IdCard();
        idCard2.setNumber("000002");
        Person person3=new Person();
        person3.setName("p3");
        IdCard idCard3=new IdCard();
        idCard3.setNumber("000002");
        //
        person1.setIdCard(idCard1);
        person2.setIdCard(idCard2);
        person3.setIdCard(idCard3);
        idCard1.setPerson(person1);
        idCard2.setPerson(person2);
        idCard3.setPerson(person3);
        //
        sess.save(person1);
        sess.save(idCard1);
        sess.save(person2);
        sess.save(idCard2);
        sess.save(person3);
        sess.save(idCard3);
        ts.commit();
        sess.close();
    }

------------------------------------

1、一对一关系中会生成两张表,一张有外键,一张无外键

2、有外键的一方用many-to-one ,然后用唯一性进行约束即可

3、无外键一方使用one-to-one

时间: 2024-10-20 13:24:24

hibernate一对一详解的相关文章

hibernate 1-1(详解)

域模型 关系数据模型: 按照外键映射: 按照主键映射: 基于外键映射的 1-1 对于基于外键的1-1关联,其外键可以存放在任意一边,在需要存放外键一端,增加many-to-one元素.为many-to-one元素增加unique="true" 属性来表示为1-1关联 另一端需要使用one-to-one元素,该元素使用 property-ref 属性指定使用被关联实体主键以外的字段作为关联字段 -不使用 property-ref 属性的 sql -使用 property-ref 属性的

Spring+Struts+Hibernate框架详解

1.Spring (1)导入Spring核心包 (2)导入struts核心包 (3)导入hibernate核心包 (4)将struts和spring整合还需导入 (5)struts配置文件详解 (6)spring配置文件详解 (7)hibernate配置文件详解 (8)数据库数据配置文件jdbc.properties (9)SSH搭建常报错误解析 1.)mysql和oracle实体类映射文件的配置 2.)报sessionFactory找不到 解决方案:仔细查看实体类映射文件 3.)数据库增删查改

(转)spring hibernate properties详解

转载地址:http://blog.sina.com.cn/s/blog_692d0a650100xyqx.html Hibernate配置属性 hibernate.dialect:一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL.取值full.classname.of.Dialect(详解见下) hibernate.show_sql:输出所有SQL语句到控制台,有一个另外的选择是把org.hibernate.SQL这个log category设

Java程序员从笨鸟到菜鸟之(五十一)细谈Hibernate(二)开发第一个hibernate基本详解

在上篇博客中,我们介绍了<hibernate基本概念和体系结构>,也对hibernate框架有了一个初步的了解,本文我将向大家简单介绍Hibernate的核心API调用库,并讲解一下它的基本配置.核心API的底层实现和源码解析将在以后的博客中一一为大家讲解. 首先我们一起来看一下开发一个hibernate应用程序的大体流程是什么样的(流程顺序可以颠倒): •创建Hibernate的配置文件 •创建持久化类 •创建对象-关系映射文件 •通过Hibernate API编写访问数据库的代码 关于配置

hibernate对应关系详解(转)

一:Hibernate 一对一连接表双向关联   1:模型介绍   一个人(Person)对应一个地址(Address).   2:实体(省略getter.setter方法)   public class Person11tab_sx {     private int personid;     private String name;     private int age;     private Address11tab_sx address11tab_sx;   public clas

(转)Hibernate 注解详解

原博:http://blog.csdn.net/sufei58/article/details/48223731 仅作为收藏使用. 一.实体Bean 每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Entity 注解来进行声明. 声明实体Bean @Entitypublic class Flightimplements Serializable {  Long id;  @Id  public Long getId() { return id; }  public void

Hibernate注解详解

一.实体Bean 每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Entity 注解来进行声明. 声明实体Bean @Entitypublic class Flightimplements Serializable {  Long id;  @Id  public Long getId() { return id; }  public void setId(Long id) { this.id = id; }} @Entity 注解将一个类声明为实体Bean, @Id 注解声

Maven搭建SpringMVC+Hibernate项目详解

前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hibernate4.3.8,之前也打了好多SpringMVC的,这部分已经非常的熟悉了,毕竟业开发过一年多SpringMVC的,这次持久层采用Hibernate,数据源采用c3p0,数据库暂采用MySQL,主要是想复习一下Hibernate.搭建Spring

Maven搭建SpringMVC+Hibernate项目详解 【转】

前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hibernate4.3.8,之前也打了好多SpringMVC的,这部分已经非常的熟悉了,毕竟业开发过一年多SpringMVC的,这次持久层采用Hibernate,数据源采用c3p0,数据库暂采用MySQL,主要是想复习一下Hibernate.搭建Spring