1.需求
1.1 在一个网上商城里有订单表,商品表,那么一个订单内可以有多个商品,一个商品可以被多个订单拥有。订单与商品就形成了多对多的关系,那么我们如何将这个关系通过hibernate映射到数据库呢?
1.2 解决思路,hibernate为我们提供了,多对多的映射,
<set ...>
<many-to-many>
</set>
这个方法的确可行,但是通过这个方法我们的中间表并不能操作其他数据,如订单记录中还有着数量以及购买单价字段,那么我们无法操作这些字段。
1.3 通过将多对多,转换为两个一对多的映射完成需求,并为中间表建立对应的实体。
2.实现
2.1 商品实体类
package com.lab9.domain;
import java.util.HashSet;
import java.util.Set;
public class Product {
Integer id;
String name;
double price;
String description;
Set<OrderItem> orderitems = new HashSet<OrderItem>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Set<OrderItem> getOrderitems() {
return orderitems;
}
public void setOrderitems(Set<OrderItem> orderitems) {
this.orderitems = orderitems;
}
}
2.2 订单实体
package com.lab9.domain;
import java.util.HashSet;
import java.util.Set;
public class Order {
private Integer id;
double total;
String realname;
String phone;
String address;
String postcode;
Set<OrderItem> orderitems = new HashSet<OrderItem>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}