Hibernate实体映射

本文通过商品系统案例,解析了一对多及多对多的关联关系,并详细展示了Hibernate实体映射配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要知道类之间的关系有五种:继承、依赖、关联、聚合、组合.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 :订单

 

 

从以上数据库设计我们可以看出 客户表与订单表是一对多的关联关系,商品表和订单表是多对多的关联关系,而我们在商品表和订单表中间加入一个订单明细表,使商品表和订单明细表成为一对多的关联关系,订单表和订单明细表成为一对多的关联关联。

 

下面我用具体事例来说明。

Adminbean

  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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值