hibernate many-to-one(多对一)及 cascade(级联)

public class User { //多

private Integer id;
private String name;
private Group group;
}

public class Group { //一

private Integer id;
private String name;

}


hbm.xml

user.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">
<hibernate-mapping package="com.model">
<class name="User" table="user1" >
<id name="id" column="user_id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="name" length="50" type="java.lang.String" />
<many-to-one name="group" column="group_id" ></many-to-one>

<!--级联(不建议配cascade)

<many-to-one name="group" column="group_id" cascade="save-update"></many-to-one>

-->

</class>

</hibernate-mapping>


Group.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">
<hibernate-mapping package="com.model">
<class name="Group" table="group1" >
<id name="id" column="group_id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="name" length="50" type="java.lang.String" />
</class>

</hibernate-mapping>


操作多对一实例:

public class ManyToOneTest extends TestCase{

public void testSave1(){
Session session = null;
Transaction ta = null;
User user = null;
try{
session = HibernateUtil.getSession();
ta = session.beginTransaction();
Group group = new Group();
group.setName("php");

User user1 = new User();
user1.setName("菜10php");
user1.setGroup(group);

User user2 = new User();
user2.setName("Z3php");
user2.setGroup(group);
session.save(group); //若设 cascade="all|save-update" ,则可无此行代码
session.save(user1);
session.save(user2);
ta.commit();
}catch(Exception e){
e.printStackTrace();
ta.rollback();
}finally{
//关闭session, user变为detached离线对象
HibernateUtil.closeSession(session);
}

}


public void testGet1(){
Session session = null;
Transaction ta = null;
User user = null;
try{
session = HibernateUtil.getSession();
ta = session.beginTransaction();
user = (User)session.get(User.class, new Integer(3));
System.out.println("user.name=" + user.getName());
System.out.println("group.name=" + user.getGroup().getName());
ta.commit();
}catch(Exception e){
e.printStackTrace();
ta.rollback();
}finally{
//关闭session, user变为detached离线对象
HibernateUtil.closeSession(session);
}

}



===================================

[b]元素的cascade属性表明操作是否从父对象级联到被关联的对象, 它
的取得可以是以下几种:
none:在保存,删除或修改当前对象时,不对其附属对象(关联对象)进行级联
操作。它是默认值。
save-update:在保存,更新当前对象时,级联保存,更新附属对象(临时对象,
游离对象)。
delete:在删除当前对象时,级联删除附属对象。
all:所有情况下均进行级联操作,即包含save-update和delete操作。[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值