********************************在处理n对m关系时,要非常小心类中元素循环嵌套的问题,比如,order里面有customer,custormer里面有orders,在取数时,就有可能溢出
多对多关系
需要中间表
比如商品项 与 商品类别,是多对多关系
中间表:商品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字段