首先要知道类之间的关系有五种:继承、依赖、关联、聚合、组合.在UML绘制图的过程中我们也要使用这五种关系图类之间的关系有五种:继承、依赖、关联、聚合、组合.在UML绘制图的过程中我们也要使用这五种关系图。在这我们只说关联关系。
关联 Association 关联指的是类之间的引用关系。这是实体域对象之间最普遍使用最广泛的一种关系。关联可分为一对一、一对多和多对多关联。在Hibernate实体映射中我们可以把所有关联关系都看成一对多的关联。
下面我用个例子说明:
商品案例数据库设计:
客户表
id :递增序列
name :登录名称
pass :登录密码
sex :性别 //enum
email : 注册邮箱
rdate : 注册日期 //BeanUtils
state :是否被激活的状态 0 1
商品表
id :递增序列
name : 商品的名称
type : 商品的类型
price : 商品的价格
管理员表:
id
name
pass
订单表:
id
number :订单编号
customerid:客户名称
odate:订单时间
state :订单的状态 //已发货 未发货 0 1
Qstate :确认订单是否订购 0 1
订单明细表
id
goodid:商品的名称
num :商品数量
total :商品的总价格
ordersid :订单
从以上数据库设计我们可以看出 客户表与订单表是一对多的关联关系,商品表和订单表是多对多的关联关系,而我们在商品表和订单表中间加入一个订单明细表,使商品表和订单明细表成为一对多的关联关系,订单表和订单明细表成为一对多的关联关联。
下面我用具体事例来说明。
Admin的bean:
public class Admin implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String pass;
public Admin(){}
public Admin(String name,String pass){
this.name=name;
this.pass=pass;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
Admin.hbm.xml:
<hibernate-mapping>
<class name="cn.csdn.domain.Admin" table="admins" catalog="db">
<id name="id">
<generator class="native"/>
</id>
<property name="name" type="string" length="30"/>
<property name="pass" type="string" length="12"/>
</class>
</hibernate-mapping>
Customer的bean:
public class Customer implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String pass;
private Sex sex;
private String email;
private Date rdate;
private int state;
private Set<Orders> orders = new HashSet<Orders>();
public Customer(String name, String pass, Sex sex, String email,
Date rdate, int state, Set<Orders> orders) {
this.name = name;
this.pass = pass;
this.sex = sex;
this.email = email;
this.rdate = rdate;
this.state = state;
this.orders = orders;
}
public Customer() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public Sex getSex() {
return sex;
}
public void setSex(Sex sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getRdate() {
return rdate;
}
public void setRdate(Date rdate) {
this.rdate = rdate;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public Set<Orders> getOrders() {
return orders;
}
public void setOrders(Set<Orders> orders) {
this.orders = orders;
}
}
Customer.hbm.xml:
<class name="cn.csdn.domain.Customer" table="customers" catalog="db">
<id name="id">
<generator class="native" />
</id>
<property name="name" type="string" length="30" />
<property name="pass" type="string" length="12" />
<property name="sex" type="string" length="4" />
<property name="email" type="string" length="30" />
<property name="rdate" type="timestamp" />
<property name="state" type="integer" />
<set name="orders" table="orders">
<key column="cid" />
<one-to-many class="cn.csdn.domain.Orders" />
</set>
</class>
Goods 的bean:
public class Goods implements Serializable{
private int id;
private String name;
private String type;
private double price;
private Set<OrdersItem> ordersItem = new HashSet<OrdersItem>();
public Goods() {
}
public Goods(String name, String type, double price,
Set<OrdersItem> ordersItem) {
this.name = name;
this.type = type;
this.price = price;
this.ordersItem = ordersItem;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Set<OrdersItem> getOrdersItem() {
return ordersItem;
}
public void setOrdersItem(Set<OrdersItem> ordersItem) {
this.ordersItem = ordersItem;
}
}
Goods.hbm.xml:
<class name="cn.csdn.domain.Goods" table="goods" catalog="db">
<id name="id">
<generator class="native"/>
</id>
<property name="name" type="string" length="50"/>
<property name="type" type="string" length="40"/>
<property name="price" type="double"/>
<set name="ordersItem">
<key column="gid"/>
<one-to-many class="cn.csdn.domain.OrdersItem"/>
</set>
</class>
Orders的bean
public class Orders implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String number;
private Customer customer;
private Date odate;
private int state;
private int Qstate;
private Set<OrdersItem> ordersItem = new HashSet<OrdersItem>();
public Orders() {
}
public Orders(int id, String number, Customer customer, Date odate,
int state, int qstate, Set<OrdersItem> ordersItem) {
super();
this.id = id;
this.number = number;
this.customer = customer;
this.odate = odate;
this.state = state;
Qstate = qstate;
this.ordersItem = ordersItem;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public Date getOdate() {
return odate;
}
public void setOdate(Date odate) {
this.odate = odate;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public int getQstate() {
return Qstate;
}
public void setQstate(int qstate) {
Qstate = qstate;
}
public Set<OrdersItem> getOrdersItem() {
return ordersItem;
}
public void setOrdersItem(Set<OrdersItem> ordersItem) {
this.ordersItem = ordersItem;
}
}
Orders.hbm.xml:
<hibernate-mapping>
<class name="cn.csdn.domain.Orders" table="orders" catalog="db">
<id name="id">
<generator class="native"/>
</id>
<property name="number" type="string" length="30"/>
<many-to-one name="customer" class="cn.csdn.domain.Customer" column="cid"/>
<property name="odate" type="timestamp" />
<property name="state" type="integer" />
<property name="Qstate" type="integer" />
<set name="ordersItem">
<key column="oid"/>
<one-to-many class="cn.csdn.domain.OrdersItem"/>
</set>
</class>
</hibernate-mapping>
OrdersItem的bean
public class OrdersItem {
private int id;
private Goods goods;
private int num;
private double total;
private Orders orders;
public OrdersItem() {
}
public OrdersItem(Goods goods, int num, double total, Orders orders) {
super();
this.goods = goods;
this.num = num;
this.total = total;
this.orders = orders;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Goods getGoods() {
return goods;
}
public void setGoods(Goods goods) {
this.goods = goods;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
public Orders getOrders() {
return orders;
}
public void setOrders(Orders orders) {
this.orders = orders;
}
}
OrdersItem.hbm.xml:
<hibernate-mapping>
<class name="cn.csdn.domain.OrdersItem" table="ordersItems"
catalog="db">
<id name="id">
<generator class="native" />
</id>
<many-to-one name="goods" class="cn.csdn.domain.Goods"
column="gid" />
<property name="num" type="integer" />
<property name="total" type="double" />
<many-to-one name="orders" class="cn.csdn.domain.Orders"
column="oid" />
</class>
</hibernate-mapping>