JPA学习笔记-映射双向一对一的关联关系

Manager类

@Table(name="jpa_manager")
@Entity
public class Manager {
	@GeneratedValue
	@Id
	private Integer id;
	@Column(name="manager_name")
	private String managerName;
	//没有外键的一方,不维护关联关系
//	@OneToOne(mappedBy="manager", fetch=FetchType.LAZY)
	@OneToOne(mappedBy="manager")//不维护关联关系,不建议修改fetch属性
	private Department department;
	//省略getter setter
}

Department类

	@GeneratedValue
	@Id
	private Integer id;
	@Column(name="department_name")
	private String departmentName;
	//生成的jpa_department表中有外键约束
	@JoinColumn(name="manager_id", unique=true)//1-1关系
	@OneToOne(fetch=FetchType.LAZY)
	private Manager manager;
	//getter setter
}

测试

		@Test
		public void testOneToOne() {
			Manager manager = new Manager();
			manager.setManagerName("主管2");

			Department department = new Department();
			department.setDepartmentName("部门2");

			manager.setDepartment(department);
			department.setManager(manager);

			entityManager.persist(manager);//先保存不维护关联关系的一方,即没有外键的一方
			entityManager.persist(department);

			//若先保存维护关联关系的一方,则会多出update语句,不推荐
//			entityManager.persist(department);
//			entityManager.persist(manager);
		}

		//若获取维护关联关系的一方,则会通过左外连接获取其关联的对象
		//可以通过@OneToMany的fetch属性来修改加载策略
		@Test
		public void testOneToOneFind() {
			Department department = entityManager.find(Department.class, 1);
			System.out.println(department.getDepartmentName());
			System.out.println(department.getManager().getManagerName());
		}

		//若获取不维护关联关系的一方,也会通过左外连接获取对象
		//可以通过@OneToOne的fetch属性来修改加载策略,但依然会发送SQL语句初始化其关联的对象
		//这说明在不维护关联关系的一方,不建议修改fetch属性
		@Test
		public void testOneToOneFind2() {
			Manager manager = entityManager.find(Manager.class, 1);
			System.out.println(manager.getManagerName());
			System.out.println(manager.getDepartment().getDepartmentName());
		}

时间: 2024-10-09 08:30:24

JPA学习笔记-映射双向一对一的关联关系的相关文章

JPA学习笔记-映射双向多对多的关联关系

Category类 @Table(name="jpa_categories") @Entity public class Category { @GeneratedValue @Id private Integer id; @Column(name="category_name") private String categoryName; @ManyToMany(mappedBy="categories") private Set<Item

JPA学习笔记-映射单向多对一的关联关系

Customer类 @Table(name="jpa_customer") @Entity public class Customer { @Column(name="id") @GeneratedValue(strategy=GenerationType.AUTO) @Id private Integer id; @Column(name="last_name") private String lastName; private String 

JPA学习笔记(8)——映射一对多关联关系

一对多关联关系 本文有很多和多对一是一样的,因此不会写得非常具体. 有看不懂的.能够參考JPA学习笔记(7)--映射多对一关联关系 Order实体类 package com.jpa.helloworld2; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; imp

JPA学习笔记(5)——EntityManager相关

Persistence EntityManagerFactory EntityManager find方法 getReference方法 persist方法 remove方法 merge方法 情况1传入的对象没有id 情况2传入的对象有identityManager的缓存中没有该对象数据库中没有该记录 情况3传入的对象有identityManager的缓存没有该对象数据库中有该记录 情况4传入的对象有identityManager的缓存有该对象 flush方法 refresh方法 clear c

JPA学习笔记(9)——映射双向一对一关联关系

双向一对一关联关系 一个部门有一个经理,一个经理管一个部门 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; impo

JPA学习笔记(7)——映射多对一关联关系

多对一关联关系 两个实体类,User和Order,一个User可以有多个Order,一个Order只能有一个User 建立关联关系 使用@ManyToOne注解映射多对一关联关系 User实体类 package com.jpa.helloworld; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.pers

Spring入门---JPA学习笔记

用了一段时间的Spring,到现在也只是处于会用的状态,对于深入一点的东西都不太了解.所以决定开始深入学习Spring. 本文主要记录JPA学习.在学习JPA之前,需要了解一些ORM的概念. ORM概念: 对象关系映射ORM(Object/Relation Mapping)是一种为了解决面向对象和关系数据之间存在互不匹配现象的技术(范式不匹配).简而言之,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到数据库中.本质上是将数据从一种形式转换到另外一种形式.(个人考虑:

spring data jpa学习笔记一:helloworld

在学习 JPA Spring Data之前,我们有必要了解一下JPA和Spring Data. JPA JPA全称Java Persistence API.即java持久化规范.JPA通过注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. Spring Data Spring Data是Spring框架的一个子项目,就像Spring MVC是Spring的一部分一样.使得数据库访问变得方便和快捷.Spring Data 支持JPA. JPA Spring Data J

JPA学习笔记(10)——映射双向多对多关联关系

多对多关联 比如现在有两个实体类:1. Product(商品)2. Category(类别) 一个商品可以有多个类别,一个类别也可以有多个商品,这就形成了多对多的关系 Product package com.jpa.helloworld2; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue;