首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

【转】hibernate many-to-one(多对1)及 cascade(级联)

2012-11-14 
【转】hibernate many-to-one(多对一)及 cascade(级联)Modelpublic class User { //多private Integer id?p

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

Model

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 />
??????? </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 />
??????? </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);
?? }
??
}

?

?

?

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

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

热点排行