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 email;
	private int age;
	
//	@JoinColumn(name="customer_id")//外键名
	//若在1的一端的@oneToMany中使用mappedBy属性,则@OneToMany端就不能使用@JoinColum属性
	@OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.REMOVE}, mappedBy = "customer")//映射一对多的关联关系,默认使用懒加载。cascade设置级联删除。
	private Set<Order> orders = new HashSet<>();
	//getter setter 省略
}


Order类

@Table(name = "jps_order")
@Entity
public class Order {
	@GeneratedValue
	@Id
	private Integer id;
	@Column(name = "order_name")
	private String orderName;

	@JoinColumn(name = "customer_id")
	// 外键
	@ManyToOne(fetch=FetchType.LAZY)//懒加载
	// 映射多对一的关联关系
	private Customer customer;
	//getter setter
}


测试

		//双向1-n,执行保存时,若先保存n,再保存1,默认情况下会多出4条update语句
		//若先保存1,则会多出n条update语句
		//建议在进行双向1-n关联关系时,使用n的一端来维护关联关系,而1的一端不维护关联关系,这样会有效减少SQL语句
		//若在1的一端的@oneToMany中使用mappedBy属性,则@OneToMany端就不能使用@JoinColum属性
		@Test
		public void testOneToManyPersist2() {
			Customer customer = new Customer();
			customer.setAge(23);
			customer.setEmail("[email protected]");
			customer.setLastName("shang");
			
			Order order1 = new Order();
			order1.setOrderName("订单1");
			
			Order order2 = new Order();
			order2.setOrderName("订单2");
			
			customer.getOrders().add(order1);
			customer.getOrders().add(order2);
			
			order1.equals(customer);
			order2.setCustomer(customer);
			
			entityManager.persist(order1);
			entityManager.persist(order2);
			entityManager.persist(customer);
		}


好复杂,还是MyBatis简单。。。









你可能感兴趣的:(email,private,customer)