`
Wind_ZhongGang
  • 浏览: 260036 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate ORM One to One

阅读更多

  讨论下Hibernate中的一对一映射。

 

  首先来了解一下一对一的单向关联映射,以Person与IDCard为例,一个人只能拥一张身份证,而一张身份证只能属于一个人,并且从Person的角度讲,需要知道拥有的是哪张IDCard,而从IDCard来讲,则没有这方面的需求。当然需求也不是死的,这里也只是举例而已,不必较真。

  1.Person.java

 

package com.template.model;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-7-20
 * Time: 下午8:13
 * To change this template use File | Settings | File Templates.
 */
public class Person {
    private Integer id;
    private String name;

    private IDCard card;

    public Person() {
    }
}

 

  2.IDCard.java

 

package com.template.model;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-7-20
 * Time: 下午8:13
 * To change this template use File | Settings | File Templates.
 */
public class IDCard {
    private Integer id;
    private String number;

    public IDCard() {
    }
}

 

 

  3.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 default-access="field">

    <class name="com.template.model.Person" table="person">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="name" column="name" type="java.lang.String"/>
        <many-to-one name="card" class="com.template.model.IDCard" column="cardid" unique="true"/>
    </class>

</hibernate-mapping>

 

 

  4.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 default-access="field">

    <class name="com.template.model.IDCard" table="idcard">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="number" column="number" type="java.lang.String"/>
    </class>

</hibernate-mapping>

  这里的设置是让person表来维护这个一对一的关系,并且主键的生成方式是交给数据库来完成的,特别需要注意的一点是如果主键的生成方式是native,那么如果你是在Mysql数据库中创建表的话,记得在id字段后加上AUTO_INCREMENT,否则会报错。至于其他的数据库,因为还没有研究,所以还不知道,如果那么高手知道请留言,谢谢。

 

 依就以上例,如果想建立一个一对一的双向关联,那么Person.java和Person.hbm.xml文件不需要修改,只需要依次修改IDCard.java和IDCard.hbm.xml文件。以下是修改后的文件。

 

  5.IDCard.java

 

package com.template.model;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-7-20
 * Time: 下午8:13
 * To change this template use File | Settings | File Templates.
 */
public class IDCard {
    private Integer id;
    private String number;

    private Person person;

    public IDCard() {
    }
}

 

 

  6.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 default-access="field">

    <class name="com.template.model.IDCard" table="idcard">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="number" column="number" type="java.lang.String"/>
        
        <one-to-one name="person" class="com.template.model.Person"/>
    </class>

</hibernate-mapping>

 

  在这里就不写出hbm文件对应的sql语句了,相信从映射文件里你应该能够想到sql怎么写了吧。可以看出在person表里用了cardid这个字段来维护Person和IDCard这两个对象的关系。

 

 

2
2
分享到:
评论

相关推荐

    hibernate-examples:Hibernate关联,Hibernate搜索和Hibernate集成

    Hibernate ORM使开发人员可以更轻松地编写其数据在应用程序进程中无法使用的应用程序。 作为ORM框架,hibernate涉及数据持久性,因为它适用于关系数据库。 在此存储库中,您将找到用于理解诸如关系映射的示例。 1...

    ORM软件monalisa-orm.zip

    如果你觉得hibernate难以驾驭,或许该软件正是你所想要的 如果你觉得mybatis成堆的xml/mapper太繁琐,或许该软件正是你所想要的 如果你觉得现有的ORM软件总有那么些不太满意的地方,...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    7.1.1 [many-to-one]元素的not-null属性 153 7.1.2 级联保存和更新 155 7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子关系 164 7.3 映射一对多双向自身...

    精通Hibernate:对象持久化技术第二版part3

    7.1.1 [many-to-one]元素的not-null属性 153 7.1.2 级联保存和更新 155 7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子关系 164 7.3 映射一对多双向自身...

    Pro JPA 2 Mastering the Java Persistence API free down

    JPA2.0 加入了大量必须的 ORM 映射增强特性,包括:支持通过使用 @ElementCollection 标注来增强 collections, maps 和 lists( 这里不是指实体之间的关联关系 ) 集合,支持 map 的单向 one-to-many 关联 (JPA1.0...

    jpa-hibernate-tutorials:带有Spring Boot和Spring-Data-JPA的Hibernate教程

    Spring Boot和JPA的Hibernate教程和演示

    Spring面试题

    类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、 4. 说下Hibernate的缓存...

    Java学习笔记-个人整理的

    {1.9.6}go-to}{33}{subsection.1.9.6} {1.9.7}\texttt {do-while}}{33}{subsection.1.9.7} {1.10}数组(array)}{34}{section.1.10} {1.10.1}数组变量的声明}{34}{subsection.1.10.1} {1.10.2}数组变量的初始化...

    jdbc基础和参考

    many-to-one:标签中对于cascade的取值delete,delete-orphan,all-delete-orphan(只用unique属性值不为true不能出现)慎用 cascade:级联属性 none:不做任何级联操作 save-update:对当前对象执行save,update, ...

    Java面试宝典2010版

    如何书写一个 one to many 配置文件. 11、iBatis与Hibernate有什么不同? 12、写Hibernate的一对多和多对一双向关联的orm配置? 9、hibernate的inverse属性的作用? 13、在DAO中如何体现DAO设计模式? 14、spring+...

    最新Java面试宝典pdf版

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    Java面试笔试资料大全

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    JAVA面试宝典2010

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    Java面试宝典-经典

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    java面试题大全(2012版)

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    Java面试宝典2012版

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计...

    java面试宝典2012

    如何书写一个 one to many 配置文件. 133 11、iBatis与Hibernate有什么不同? 133 12、写Hibernate的一对多和多对一双向关联的orm配置? 134 9、hibernate的inverse属性的作用? 134 13、在DAO中如何体现DAO设计模式? ...

    Java面试宝典2012新版

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    针对JPA的活动记录模式ActiveJPA.zip

    ActiveJPA使用到了JPA规范,因此所有JPA的ORM实现(Hibernate、EclipseLink、OpenJPA等)都可以与ActiveJPA协同使用。 示例代码: // Get order by id Order order = Order.findById(12345L); // Get all...

Global site tag (gtag.js) - Google Analytics