spring jpa当中N对M级联关系整理

来源:互联网 发布:淘宝怎么看同行数据 编辑:程序博客网 时间:2024/05/04 07:05


********************************在处理n对m关系时,要非常小心类中元素循环嵌套的问题,比如,order里面有customer,custormer里面有orders,在取数时,就有可能溢出







当级联查询为空时,可以使用@NotFound(action = NotFoundAction.IGNORE),这样,级联对象为空,也可以不会异常

多对多关系
需要中间表


比如商品项 与 商品类别,是多对多关系


中间表:商品ID  与 商品类别ID,相互映射;关于中间表,都是外键,指向实际的两个实体,外键要求这些外键对应的值必须在实体表中都存在,否则保存不了


另外,这两个,只能由一方来维护


public class Item {
@JoinTable(name="ITEM_CATEGORY",   //特别要注意,中间表的名字和映射关系
joinColumns={@JoinColumn(name="ITEM_ID", referencedColumnName="ID")},
inverseJoinColumns={@JoinColumn(name="CATEGORY_ID", referencedColumnName="ID")})
@ManyToMany
public Set<Category> getCategories() {
return categories;
}


----------------------------------------------------------------------------------------------------



@JoinColumn(name="customer_id")

这里的列名,是区分大小写的,一定要保持一致,否则报错

----------------------------------------------------------------------------------------------------

一对多,比如一个customer类里面,有多个orders,

在customer类里面

Set<Order> orders;

@OneToMany(fetch=FetchType.LAZY,cascade={CascadeType.ALL},mappedBy="customer")
public Set<Order> getOrders() {
return orders;
}


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


在order类里面,一定要有customer元素

----------------------------------------------------------------------------------------------------


多对一,比如:多个订单对应一个用户,order对应 customer

manyToOne,在order类中,定义customer元素,在这里,需要@JoinColumn(name="CUSTOMER_ID")来定义外键,这样orders表中,就会有CUSTOMER_ID字段

0 0
原创粉丝点击