JPA学习笔记(10)——映射双向一对一关联关系
来源:互联网 发布:三维建筑设计软件apm 编辑:程序博客网 时间:2024/05/21 16:55
双向一对一关联关系
一个部门有一个经理,一个经理管一个部门
Department实体类
package com.jpa.helloworld2;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.OneToOne;import javax.persistence.Table;@Table(name="T_DEPARTMENT")@Entitypublic class Department { @Column(name="ID") @GeneratedValue @Id private Integer id; @Column(name="DEPT_NAME") private String deptName; @JoinColumn(name="MANAGER_ID") @OneToOne private Manager manager; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } public Manager getManager() { return manager; } public void setManager(Manager manager) { this.manager = manager; }}
Manager实体类
package com.jpa.helloworld2;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.OneToOne;import javax.persistence.Table;@Table(name="T_MANAGER")@Entitypublic class Manager { @Column(name="ID") @GeneratedValue @Id private Integer id; @Column(name="NAME") private String name; @OneToOne(mappedBy="manager") private Department department; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; }}
关于mappedBy的使用,在前面的博客有讲到。
插入
Manager manager = new Manager();manager.setName("mgr1");Department department = new Department();department.setDeptName("deptName1");manager.setDepartment(department);department.setManager(manager);entityManager.persist(manager);entityManager.persist(department);
关于插入的顺序,先插入不维护关联关系的一方,即manager(没有外键的一方)
查询
查询维护关联关系的一方(有外键的一方)
Department dept = entityManager.find(Department.class, 1);System.out.println(dept.getDeptName());
- 1
- 2
- 3
- 1
- 2
- 3
发现执行了两次sql语句,既查询了department,也查询了manager
但我们此时只想要department,不想要manager。可以用fetch更改为懒加载策略:
在department实体类中
@OneToOne(fetch=FetchType.LAZY)private Manager manager;
查询不维护关联关系的一方(没有外键的一方)
Manager m = entityManager.find(Manager.class, 1);System.out.println(m.getName());
运行发现,查询manager时,一定会去查department,即使用fetch改为懒加载策略,结果也是一样的。
不同的时,如果改为懒加载,将会执行两个sql语句查询。默认情况下是执行一句sql语句关联查询。因此不推荐设置fetch
一定会查询两个对象的原因:
- 在查询manager表时,没有外键,jpa不知道该怎么处理Manager中的关联对象,因此它一定会去department表中查看有没有相应的记录。
- 在查询department时,因为有外键,所以jpa很容易的知道该怎么处理关联对象:要么返回一个代理,要么返回对象)
阅读全文
0 0
- JPA学习笔记(10)——映射双向一对一关联关系
- JPA学习笔记(10)——映射双向一对一关联关系
- JPA学习笔记(9)——映射双向一对一关联关系
- JPA学习笔记-映射双向一对一的关联关系
- JPA学习笔记(10)——映射双向多对多关联关系
- JPA映射关联关系-双向一对一
- JPA学习笔记(8)——映射双向一对多关联关系
- JPA学习笔记(9)——映射双向一对多关联关系
- JPA学习笔记(11)——映射双向多对多关联关系
- JPA学习笔记(9)——映射双向一对多关联关系
- JPA学习笔记(11)——映射双向多对多关联关系
- jpa双向一对一关联关系
- JPA学习笔记-映射双向一对多的关联关系
- Hibernate映射——一对一双向关联映射(六)
- 关联关系映射——一对一关联
- 关联关系映射——一对一关联
- JPA学习笔记(7)——映射多对一关联关系
- JPA学习笔记(8)——映射一对多关联关系
- 让sublime text3支持Vue语法高亮显示 1.准备语法高亮插件vue-syntax-highlight。 下载地址: https://github.com/vuejs/vue-synt
- 十九、基础数据-3D 图表
- poj2082 Terrible Sets
- 使用datagrid 进行分页
- POJ 1625 AC自动机+大数+字符编码
- JPA学习笔记(10)——映射双向一对一关联关系
- CDN详解
- 剑指offer——21.栈的压入、弹出
- swiper animate
- The Review Plan I ZOJ 3687
- error C2440: “=”: 无法从“int [5][5]”转换为“int (*)[4]”
- Http Request Headers各属性的作用
- hdu 6113 度度熊的01世界
- 扩展的放音收号标签