比如 用户 对 订单(one to many)
@Entity
public class Customer {
private Set<Order> orders = new HashSet<>();
@JoinColumn(name="CUSTOMER_ID") //, mappedBy="customer"
@OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.ALL})
public Set<Order> getOrders() {
return orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
当用 @JoinColumn来定义时,保存带orders的customer对象时,如果orders不是空的,就会自动去保存orders,
但是,如果CascadeType不是可写的,即级联不能写,就会报错,原因是order类中,JoinColumn定义了外键CUSTOMER_ID,并且在级联处理中,order是由customer维护的
如何修改,在本类定义中,去掉JoinColumn,加上 mappedBy="customer"
mappedBy="customer"的作用是,在级联关系中,由order中的customer元素来维护关系,所以在保存customer时,orders是不作处理的
因此JoinColumn 和 mappedBy也是不能同时使用的,因为他们是相反的意思,一个是自己维护关系,一个是对方维护关系,不能同时使用