JPA系列八:映射关联关系-双向一对多

1、在实体类Order中添加customer属性及其getter和setter方法

private Customer customer;

//映射单向多对一的关联关系
//使用 @ManyToOne 来映射多对一的关联关系
//使用 @JoinColumn 来映射外键.
//可使用 @ManyToOne 的 fetch 属性来修改默认的关联属性的加载策略
@JoinColumn(name="CUSTOMER_ID")
@ManyToOne(fetch=FetchType.LAZY)
public Customer getCustomer() {
	return customer;
}

public void setCustomer(Customer customer) {
	this.customer = customer;
}

2、在实体类Customer中添加orders属性及其getter和setter方法。

private Set<Order> orders = new HashSet<>();

//映射单向一对多的关联关系
//使用 @OneToMany 来映射一对多的关联关系
//使用 @JoinColumn 来映射外键列的名称
//可以使用 @OneToMany 的 fetch 属性来修改默认的加载策略
//可以通过 @OneToMany 的 cascade 属性来修改默认的删除策略.
//注意: 若在 1 的一端的 @OneToMany 中使用 mappedBy 属性, 则 @OneToMany 端就不能再使用 @JoinColumn 属性了.
@OneToMany(fetch=FetchType.LAZY,cascade={CascadeType.REMOVE},mappedBy="customer")
public Set<Order> getOrders() {
	return orders;
}

public void setOrders(Set<Order> orders) {
	this.orders = orders;
}

3、测试:

//若是双向 1-n 的关联关系, 执行保存时
//若先保存 n 的一端, 再保存 1 的一端, 默认情况下, 会多出 n 条 UPDATE 语句.
//若先保存 1 的一端, 则会多出 n 条 UPDATE 语句
//在进行双向 1-n 关联关系时, 建议使用 n 的一方来维护关联关系, 而 1 的一方不维护关联系, 这样会有效的减少 SQL 语句. 
//使用mappedBy 指定由多的一方的customer属性来维护关联关系。
//注意: 若在 1 的一端的 @OneToMany 中使用 mappedBy 属性, 则 @OneToMany 端就不能再使用 @JoinColumn 属性了. 
@Test
public void testOneToManyPersist(){
	Customer customer = new Customer();
	customer.setAge(18);
	customer.setEmail("mm@163.com");
	customer.setLastName("MM");
	Order order1 = new Order();
	order1.setOrderName("O-MM-1");
	Order order2 = new Order();
	order2.setOrderName("O-MM-2");
	//建立关联关系
	customer.getOrders().add(order1);
	customer.getOrders().add(order2);
	order1.setCustomer(customer);
	order2.setCustomer(customer);
	//执行保存操作
	entityManager.persist(customer);
	entityManager.persist(order1);
	entityManager.persist(order2);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值