Hibernate之one-to-many

  Hibernate之one-to-many

感悟:基于架构的设计,主要在于xml配置文件的编写

原理:表中一对多的实现是在表中使用外键关联,也就是通过一张表的主键做为另一个表的外键来建立一对多关系。

hibernate的pojo类中实现一对多关系的方法是在主控类中个设置一个集合属性来包含对方类的若干对象,而在另一个类中,只包含主控类的一个对象,从而实现一对多关系的建立。

例如:customer和order表,一个customer对应多个order(订单),则应该在Customer的pojo类中设置一个set来包含order的若干对象。

demo:

1、数据库:

create table `testdb`.`customer`(

`cid` int not null auto_increment,

`cname` varchar(20),

primary key (`cid`)

);

create unique index `PRIMARY` on `testdb`.`customer`(`cid`);

create table `testdb`.`order`(

`oid` int not null auto_increment,

`odes` varchar(500),

`cid` int,

primary key (`oid`)

);

create unique index `PRIMARY` on `testdb`.`order`(`oid`);

注意,上面两个表在数据库中是相互独立的噢,由于这里所说的一对多是在hibernate层上讨论的,跟在数据库中创建主外键的关联不一样。

2、创建eclipse的hibernate支持

3、创建两个表的hbm映射,并相应生成POJO类

4、修改pojo类

遵从刚才讨论的在hibernate层上实现一对多的原则:在主控类中个设置一个集合属性来包含对方类的若干对象,而在另一个类中,只包含主控类的一个对象,从而实现一对多关系的建立。

//Customer.java

package org.myhibernate;

import java.util.HashSet;

import java.util.Set;

/**

* Customer generated by MyEclipse Persistence Tools

*/

public class Customer implements java.io.Serializable

{

// Fields

private Integer cid;

private String cname;

private Set orders=new HashSet();

public Set getOrders()

{

return orders;

}

public void setOrders(Set orders)

{

this.orders = orders;

}


/** default constructor */

public Customer()

{

}

/** full constructor */

public Customer(String cname)

{

this.cname = cname;

}

// Property accessors

public Integer getCid()

{

return this.cid;

}

public void setCid(Integer cid)

{

this.cid = cid;

}

public String getCname()

{

return this.cname;

}

public void setCname(String cname)

{

this.cname = cname;

}

}

//Order.java

package org.myhibernate;

/**

* Order generated by MyEclipse Persistence Tools

*/

public class Order implements java.io.Serializable

{

// Fields

private Integer oid;

private String odes;

private Customer customer;//注意:这里没有跟数据库相应的cid属性,取而代之的是一个主表的类对象customer

// Constructors

/** default constructor */

public Order()

{

}

/** full constructor */

public Order(String odes, Integer cid)

{

this.odes = odes;

}

// Property accessors

public Integer getOid()

{

return this.oid;

}

public void setOid(Integer oid)

{

this.oid = oid;

}

public String getOdes()

{

return this.odes;

}

public void setOdes(String odes)

{

this.odes = odes;

}

public Customer getCustomer()

{

return customer;

}

public void setCustomer(Customer customer)

{

this.customer = customer;

}


}

5、修改hbm映射

<!--Customer.hbm.xml-->

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!--

Mapping file autogenerated by MyEclipse Persistence Tools

-->

<hibernate-mapping>

<class name="org.myhibernate.Customer" table="customer"

catalog="testdb">

<id name="cid" type="integer">

<column name="cid" />

<generator class="native" />

</id>

<property name="cname" type="string">

<column name="cname" length="20" />

</property>

<set name="orders" table="order" cascade="all">

<key column="cid"></key>

<one-to-many class="org.myhibernate.Order" />

</set>


</class>

</hibernate-mapping>

<!--Order.hbm.xml-->

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!--

Mapping file autogenerated by MyEclipse Persistence Tools

-->

<hibernate-mapping>

<class name="org.myhibernate.Order" table="order"

catalog="testdb">

<id name="oid" type="integer">

<column name="oid" />

<generator class="native" />

</id>

<property name="odes" type="string">

<column name="odes" length="500" />

</property>

<many-to-one name="customer" class="org.myhibernate.Customer"

column="cid" >

</many-to-one>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值