一、基于外键的双向1对1

  • 对于基于外键的1-1关联,其外键可以存放在任意一边,在需要存放外键一端,增加many-to-one元素。为many-to-one元素增加unique=“true” 属性来表示为1-1关联

    另一端需要使用one-to-one元素,该元素使用 property-ref 属性指定使用被关联实体主键以外的字段作为关联字段

1.实体类

部门类(Department .java)

public class Department {

    private Integer dId;
private String dName; private Manager manager;
//忽略getter和setter方法
...
}

管理者类(Manager .java)

public class Manager {

    private Integer mId;
private String mName; private Department department;
//忽略getter和setter方法
...
}

2.映射文件

Department.hbm.xml

    <!-- 基于外键的一对一映射,该映射与多对一实质相同,是多对一关联的一个特例,外键可以放到任意一端,
在存放外键的一端使用<Many-to-one>元素,并在该元素中添加unique属性,且设置值true,表示多的一方也必须唯一
在另一端使用<one-to-one>元素。
-->
<many-to-one name="manager" class="Manager"
column="M_ID" unique="true">
</many-to-one>

Manager.hbm.xml

<!-- 没有外键的一端在对应的数据表中已经有外键了,当前持久化类使用one-to-one进行映射
property-ref:指定使用被关联的实体主键以外的字段作为关联字段
-->
<one-to-one name="department"
class="com.withXml.bothOneToOne.entity.
withForeignKey.Department"
property-ref="manager">
</one-to-one>

3.CRUD测试

    /**
* 保存操作
*/
@Test
public void testOneToOneSave(){
//新建部门对象
Department department = new Department();
department.setdName("财务部"); //新建管理者对象
Manager manager = new Manager();
manager.setmName("张铭"); //设定关联关系
department.setManager(manager);
manager.setDepartment(department); //执行保存,先保存没有外键列的对象,这样就会减少update语句,即先保存manage后保存department
session.save(manager);
session.save(department); } /**
* 查询操作
*/
@Test
public void testOneToOneGet(){
//默认情况下,对关联属性使用懒加载,所以会出现懒加载异常
Department department = (Department) session.get(Department.class, 1);
System.out.println(department.getdName()); //出现懒加载异常
// session.close();
// Manager managerName = department.getManager();
//无异常,仅仅是显示对象的类型
// System.out.println(managerName.getClass());
//有异常,使用到了对象的属性
// System.out.println(managerName.getmName()); //
Manager managerName = department.getManager();
System.out.println(managerName.getmName());
} /**
* 查询操作
*/
@Test
public void testOneToOneGet2(){
//在查询没有外键的一端对象时,使用左外连接一并查出其关联的对象,并已经初始化
Manager manager = (Manager) session.get(Manager.class, 1);
System.out.println(manager.getmName());
}

Hibernate(11)_基于外键的双向1对1的更多相关文章

  1. Hibernate(12)_基于主键的双向1对1

    一.基于主键的双向1对1 1.介绍: 基于主键的映射策略:指一端的主键生成器使用 foreign 策略,表明根据"对方"的主键来生成自己的主键,自己并不能独立生成主键. <p ...

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

    基于外键的双向一对一关联映射 需要在一端添加<one-to-one>标签,用property-ref来指定反向属性引用. 还是通过刚才用户和地址来演示双向一对一关联. 代码演示 一.实体类 ...

  3. Hibernate 基于外键的双向一对一关联映射

    之前简单介绍了基于外键的单项一对一的关联映射关系,本文简单介绍基于外键的双向一对一的关联映射. 1.设计表结构 表结构对于双向一对一来说没有多少改变,只是双向都可以获取到对方. 2.创建Person对 ...

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

    这篇讲解 基于外键的双向一对一关联映射 1.考察如下信息,人和身份证之间是一个一对一的关系.表的设计 2.类结构 Person.java public class Person implements ...

  5. Hibernate学习(二补充)关系映射----基于外键的双向一对一

    刚刚写的是基于外键的单向一对一.  那么双向一对一就是在单向一对一的基础上稍微改动就可以了. account.java和account.hbm.xml都不用变动  只要我们小小的变动address.j ...

  6. 注解:【基于外键的】Hibernate双向1->1关联

    Person与Address关联:双向1->1,[基于外键的]. #主表不应该控制关联关系.(否则会导致生成额外的update语句,从而导致性能下降), #因此主表对应的实体中使用@OneToO ...

  7. 注解:【基于外键的】Hibernate单向1->1关联

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

  8. Hibernate学习(二)关系映射----基于外键的单向一对一

    事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...

  9. Hibernate之基于外键映射的一对一(1-1)关联关系

    1.对于基于外键的1-1关联,其外键可以存放在任意一边,在需要存放外键一端,增加many-to-one元素.为many-to-one元素增加unique="true"属性来表示为1 ...

随机推荐

  1. 最长k可重区间集问题&&最长k可重线段集问题

    题解: 洛谷上这两题的题意都是有问题的 按照标程题意不应该是开区间而是左开右闭区间 然后连边比较巧妙 我们可以看成选k条不相交的路径,其中i-i+1中有k条边 所以建图i-i+1流量为k,权值为0 l ...

  2. alpha冲刺2/10

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:拿快递也不能耽搁了软工 团队部分 后敬甲(组长) 过去两天完成了哪些任务 文字描述 github代码管理规范 商家端订单 ...

  3. 10个财务工作中常用的 Excel 万能公式

    1.多条件判断公式 =IF(AND(条件1,条件2...条件n),同时满足条件返回的值,不满足条件返回的值) =IF(OR(条件1,条件2...条件n),同时满足任一条件返回的值,不满足条件返回的值) ...

  4. 【Codeforces】Gym100633 D. LWDB

    题解 点分治,然后每个点上挂着一个距离不超过\(a_{i}\)的颜色改成\(c\) 用一个单调栈维护距离单调递减,每次查询在每个包括这个点的分治中心的单调栈上二分,找到修改最靠前的颜色作为这个点的颜色 ...

  5. C语言之指针变量

    菜单导航 1.指针变量 2.指针和数组 3.常量指针和指向常量的指针 4.指针和字符串的关系 5.数组越界造成的访问不属于自己的内存空间现象 6.引用数据类型和基本数据类型,形参和实参 7.字符串和字 ...

  6. CAS和ABA问题

    一.引言                                                                                                 ...

  7. tomcat配置后台管理监控页面

  8. seafile数据的备份与恢复

    seafile数据备份包括MySQL数据备份与seafile,seahub数据备份两个部分.所以在备份的时候需要注意这一点. 我的存储底层用glusterfs数据共享,为了防止一台服务器宕机以后另一台 ...

  9. 关于window.open窗口的resize事件

    jQuery 事件 - resize() 方法 当调整浏览器窗口的大小时,发生 resize 事件. resize() 方法触发 resize 事件,或规定当发生 resize 事件时运行的函数. & ...

  10. Jenkins环境搭建(2)-搭建jmeter+ant+jenkins自动化测试环境

    一直想在持续集成方向学习并研究一番,近期正准备结合jmeter+ant+jenkins做自动化接口测试,在学习的同时,正好实践一番,毕竟实践才是真理. 在搭建jmeter+ant+jenkins环境有 ...