hibernate中一对多的分析
2007-12-26 17:31
218 查看
刚开始学hibernate时,会对hibernate的一对多映射产生问题,我一开始学的时候也是这样,遇到很多一对多的问题,主要是级联问题,例如一对多级联的查找删除等,很头痛,利用现在的空余时间我自己总结一下。
public class Order {
private int id;
private String userID;
private Date date;
private int method;
private int status;
private float price;
private Set lineOrders = new HashSet();//存储订单子项
//setter,getter函数就省略了
}
首先就是写hibernate的配置文件,其他的没什么好说的,主要就是set 的映射,
<set name="lineOrders" table="LINEORDER" lazy="false" cascade="all-delete-orphan">
<key column="ORDER_ID"/>
<one-to-many class="com.NetShop.Model.LineOrder"/>
</set>
table="LINEORDER" 表示many那边的表名,name="lineOrders"表示Order类中的set 的变量名,column="ORDER_ID"表示many方LineOrder的的外键,使得该类可以通过这个外键找到,级联表中的行赋值给set中的元素。class="com.NetShop.Model.LineOrder"表示many方的对象类型。
cascade="all-delete-orphan“ 表示添加删除更新实现级联效果。
下面级联删除订单的代码:
public boolean deleteOrder(int id)
{
try{
Transaction tran = this.session.beginTransaction();
// 执行语句
Order order = (Order) session.load(Order.class, new Integer(id));
this.session.delete(order);
// 提交事务
tran.commit();
// 关闭Session
this.session.close();
return true;
}
catch(HibernateException e)
{
return false;
}
}
下面是插入订单的代码:
public boolean insertOrder(Order order,List lines) {
// TODO Auto-generated method stub
try{
Transaction tran = this.session.beginTransaction() ;
// 执行语句
this.session.save(order) ;
int id = order.getId();//因为是用oracle的sequence生成的id不可控,所以要在先存玩oeder后获取id再保存级联的lineorder,不然会出现完整性约束
for (int i=0; i<lines.size();i++)
{
((LineOrder)lines.get(i)).setOrderID(id);
this.session.save((LineOrder)lines.get(i)) ;
}
// 提交事务
tran.commit() ;
// 关闭Session
this.session.close() ;
return true;
}
catch(HibernateException e)
{
return false;
}
}
public class Order {
private int id;
private String userID;
private Date date;
private int method;
private int status;
private float price;
private Set lineOrders = new HashSet();//存储订单子项
//setter,getter函数就省略了
}
首先就是写hibernate的配置文件,其他的没什么好说的,主要就是set 的映射,
<set name="lineOrders" table="LINEORDER" lazy="false" cascade="all-delete-orphan">
<key column="ORDER_ID"/>
<one-to-many class="com.NetShop.Model.LineOrder"/>
</set>
table="LINEORDER" 表示many那边的表名,name="lineOrders"表示Order类中的set 的变量名,column="ORDER_ID"表示many方LineOrder的的外键,使得该类可以通过这个外键找到,级联表中的行赋值给set中的元素。class="com.NetShop.Model.LineOrder"表示many方的对象类型。
cascade="all-delete-orphan“ 表示添加删除更新实现级联效果。
下面级联删除订单的代码:
public boolean deleteOrder(int id)
{
try{
Transaction tran = this.session.beginTransaction();
// 执行语句
Order order = (Order) session.load(Order.class, new Integer(id));
this.session.delete(order);
// 提交事务
tran.commit();
// 关闭Session
this.session.close();
return true;
}
catch(HibernateException e)
{
return false;
}
}
下面是插入订单的代码:
public boolean insertOrder(Order order,List lines) {
// TODO Auto-generated method stub
try{
Transaction tran = this.session.beginTransaction() ;
// 执行语句
this.session.save(order) ;
int id = order.getId();//因为是用oracle的sequence生成的id不可控,所以要在先存玩oeder后获取id再保存级联的lineorder,不然会出现完整性约束
for (int i=0; i<lines.size();i++)
{
((LineOrder)lines.get(i)).setOrderID(id);
this.session.save((LineOrder)lines.get(i)) ;
}
// 提交事务
tran.commit() ;
// 关闭Session
this.session.close() ;
return true;
}
catch(HibernateException e)
{
return false;
}
}
相关文章推荐
- hibernate 一对多关联关系(具体分析)
- hibernate 一对多关联关系(详细分析)
- Hibernate关联映射 --- 一对多实例分析(双向关联)
- 【SSH三大框架】Hibernate基础第十二篇:load()懒加载分析以及一对一、一对多、多对一、多对多懒加载的分析
- Hibernate双向一对一,一对多,多对多关系映射
- hibernate 一对多,多对多查询
- Java程序员从笨鸟到菜鸟之(五十二)细谈Hibernate(三)Hibernate常用API详解及源码分析
- Hibernate详解(2)——一对多映射分析
- (hibernate)inverse,cascade详细分析(举例说明)
- Hibernate详解(3)——一对一映射分析
- Hibernate中使用未映射为主键的“id”字段进行查询的场景分析
- Hibernate关联关系配置(一对一,一对多,多对多)
- hibernate中的三种状态的详细分析:
- Hibernate懒加载深入分析
- Hibernate中一对多,一对一,多对多的简单实现
- 细谈Spring(十)深入源码分析Spring之HibernateTemplate 和HibernateDaoSupport
- Hibernate详解(4)——多对多映射分析
- 分析Hibernate的缓存机制
- JEE5标准与Struts/Spring/Hibernate等诸多开源框架的比较分析
- hibernate 一对多 关系关联映射