网站上各种搜索,都是一些清晰或者不清晰的例子,但是用下来一是确实不给力,二是完全不知道所以然。

后来终于在书中查到了就在这里记一下。

首先要说明,这里只解释双向一对一只有一个表里面有外键的情况。

就以比较普遍的Person和Address为例。

新建表t_person: person_id,person_name.

新建表t_address:address_id,person_id.

新建Person.java类里面有属性:personId, personName, address;

新建Address.java类里面有属性:addressId,person;

重点来了,在Person.hbm.xml里面这么配置

<one-to-one name="address" class="com.bean.Address" cascade="all" property-ref="person"/>

而在Address.hbm.xml里面这么配置

<many-to-one name="person" class="com.bean.Person" fetch="select" unique="true" column="person_id"/>

我们可以看到一个是one-to-one一个是many-to-one的unique。

分清楚这两个很重要,many-to-one用在保存外键的表,也就是说Address表,one-to-one用在没有保存外键的表,也就是person表.

而Address.hbm.xml这个配置的意思是:在Address.java里面有一个person属性,它是一个外键,并且对应的列是t_address表里面的person_id. unique="true" 是说这里的关系是一对一的。

Person.hbm.xml 的配置文件意思是:我是一个主表,我里面有一个addresss的属性,跟t_address表里面的person_id是关联再一起 的。

cascade=“all”的意思是,级联所有操作,关于这个属性更详细的资料自己查去。

这样就够清楚了吧。

Hibernate一对一双向关联(外键)的更多相关文章

  1. Hibernate一对一双向关联映射

    关键原因在于对象模型具有方向性: 单向:一端只能加载另一端,不能反过来. 双向:两端都可以加载另一端. 问题来了:如何我们想从身份证端(IdCard)加载人(Person),怎么办呢? 下面我们开始介 ...

  2. hibernate 多表关联外键问题无法截断表的解决办法

    目前只有一个办法 就是手动清除其他表的外键关联,然后在做一个小swing单独去操作这个表,而不运行主控方相关的代码 当web运行后,外键会再次设置好

  3. Hibernate 一对一(基于唯一外键的关联)

    主表 hbm.xml中 使用<one-to-one> 从表hbm.xml中使用<many-to-one> 并指定unique=true people.hbm.xml: < ...

  4. Hibernate一对一双向关联(注解)

    每一个人(Person)对应一个身份证号(IdCard) package cqvie.yjq.domain; import java.util.Date; import javax.persisten ...

  5. Java进阶知识07 Hibernate一对一双向外键关联(Annotation+XML实现)

    1.Annotation 注解版 1.1.创建Husband类和Wife类 package com.shore.model; import javax.persistence.Entity; impo ...

  6. HIBERNATE一对一双向外键联合主键关联

    HIBERNATE一对一双向外键联合主键关联: 一. 创建主键类:这个主键必须实现serializedable接口和重写其中的hashCode方法和equals方法:为主键类添加一个叫做@Embedd ...

  7. (Hibernate进阶)Hibernate映射——一对一双向关联映射(六)

    上一篇博客我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份证端加载人得信息.如图所示: 关键原因在于对象模型具有方向性: 单向: ...

  8. Hibernate从入门到精通(六)一对一双向关联映射

    在上次的博文Hibernate从入门到精通(五)一对一单向关联映射中我们讲解了一下一对一单向关联映射,这次我们继续讲解一下与之对应的一对一双向关联映射. 一对一双向关联 与一对一单向关联映射所不同的的 ...

  9. Hibernate(六)一对一双向关联映射

    在上次的博文Hibernate从入门到精通(五)一对一单向关联映射中我们讲解了一下一对一单向关联映射, 这次我们继续讲解一下与之对应的一对一双向关联映射. 一对一双向关联 与一对一单向关联映 射所不同 ...

随机推荐

  1. [转]HTML5 classList API

    Having thrust myself into the world of JavaScript and JavaScript Libraries, I've often wondered: Whe ...

  2. java与.net比较学习系列开发环境和常用调试技巧常用操作快捷键

    调试         F5 F11 调试运行   CTRL+F5 暂无 非调试运行   F6 不适用 编译整个解决方案   SHIFT+F6 不适用 编译当前选择的工程   SHIFT+F5 CTRL ...

  3. JSP 笔记

    <%@ page contentType="text/html;charset=UTF-8"%> <!-- 字符编码为utf-8,不然会乱码.... --> ...

  4. ThinkPHP函数详解:F方法

    我们已经了解了ThinkPHP中的S方法的用法,F方法其实是S方法的一个子集功能,仅用于简单数据缓存,并且只能支持文件形式,不支持缓存有效期,因为采用的是PHP返回方式,所以其效率较S方法较高,因此我 ...

  5. Integer跟int的区别(备份回忆)

    int与Integer的区别 int 是基本数据类型Integer是其包装类,注意是一个类.为什么要提供包装类呢???一是为了在各种类型间转化,通过各种方法的调用.否则 你无法直接通过变量转化.比如, ...

  6. UpdateProgress使用

    UpdateProgress是一个进度显示条,加在AJAX里能显得更加的人性化(个人认为).现在我们就开始吧: 第一.新建一个AJAX项目.在页面上加上ScriptManager,UpdatePane ...

  7. jasper3

    package jasper; import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileOutputStr ...

  8. ns2出现Client: Handoff Attempt的情况解决

    找到mac/mac-802_11.cc,这是系统本身一个bug,对于adhoc网络无需进行切换尝试. > if (*rcount == 3 && handoff == 0) {& ...

  9. HTTP协议认识

    一.HTTP协议概念 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议 HTTP是一个应用层协议,由请求和响应 ...

  10. javascript 去除字符串中重复字符

    /** * 去除字符串中重复的字符,以下提供2种方法, * removeRepeat()为自己所想: * removeRepeat2()参考网上思路补充的 * removeRepeat3()敬请期待· ...