读书人

hibernate之cascade(1)

发布时间: 2012-10-08 19:54:56 作者: rapoo

hibernate之cascade(一)

TrainingStudent.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>    <class name="com.hibernate.entity.TrainingStudent" table="training_student" schema="dbo" catalog="pubs">        <id name="id" type="java.lang.Integer">            <column name="id" />            <generator />        </id>        <property name="classId" type="java.lang.Integer" insert="false" update="false">            <column name="class_id" />        </property>        <property name="stuName" type="java.lang.String">            <column name="stu_name" length="50" />        </property>        <many-to-one name="trainingClass" fetch="select" cascade="all" lazy="false" >        <column name="class_id" not-null="true"></column>        </many-to-one>    </class></hibernate-mapping>

?

TrainingClass.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>    <class name="com.hibernate.entity.TrainingClass" table="training_class" schema="dbo" catalog="pubs">        <id name="id" type="java.lang.Integer">            <column name="id" />            <generator />        </id>        <property name="className" type="java.lang.String">            <column name="class_name" length="50" />        </property>        <set name="trainingStudent" cascade="all">        <key column="class_id" not-null="false"></key>        <one-to-many />        </set>    </class></hibernate-mapping>?

?

?

package com.hibernate.entity;import java.util.HashSet;import java.util.Set;public class TrainingClass implements java.io.Serializable {// Fieldsprivate Integer id;private String className;private Set<TrainingStudent> trainingStudent = new HashSet();// Constructors/** default constructor */public TrainingClass() {}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getClassName() {return this.className;}public void setClassName(String className) {this.className = className;}public Set<TrainingStudent> getTrainingStudent() {return trainingStudent;}public void setTrainingStudent(Set<TrainingStudent> trainingStudent) {this.trainingStudent = trainingStudent;}}
?

?

?

package com.hibernate.entity;public class TrainingStudent implements java.io.Serializable {// Fieldsprivate Integer id;private Integer classId;private String stuName;private TrainingClass trainingClass;// Constructors/** default constructor */public TrainingStudent() {}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public Integer getClassId() {return this.classId;}public void setClassId(Integer classId) {this.classId = classId;}public String getStuName() {return this.stuName;}public void setStuName(String stuName) {this.stuName = stuName;}public TrainingClass getTrainingClass() {return trainingClass;}public void setTrainingClass(TrainingClass trainingClass) {this.trainingClass = trainingClass;}}

?

?以上是例子需要的内容。

one端可以级联修改many端的数据,many端可以级联删除one端。many端可以修改自己数据,但是不能通过many端去修改one端的数据。比如:

?

Session session=HibernateSessionFactory.getSession();

session.beginTransaction();

TrainingStudent ts=(TrainingStudent) session.get(TrainingStudent.class, 6);

ts.setClassId(4);

?

?

ts.setClassId(4);

TrainingClass t1=(TrainingClass) session.get(TrainingClass.class,4);

ts.setTrainingClass(t1);

session.saveOrUpdate(ts);

这样做是允许的,因为它是在修改自身的数据。但是下面这样是不允许的:

ts.getTrainingClass().setId();

因为这是在通过many端去修改one端内部的主键。这样做是不允许的。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

读书人网 >编程

热点推荐