HIBERNATE一对多配置实例 hibernate入门实例
2. 创建Zlass和Student对象
//Zlass对象---------------------------------------------------------
public class Zlass{
private String class_id;
private String class_name;
private java.util.Set students;
public void setId(String id){
this.class_id = id;
}
public void setClassName(String className){
this.class_name = className;
}
public void setStudents(java.util.Set students){
this.students = students;
}
public String getId(){
return class_id;
}
public String getClassName(){
return class_name;
}
public java.util.Set getStudents(){
return students;
}
}
//学生对象
public class Student{
private String student_id;
private String name;
private Address address;
private java.util.Set events;
private java.util.Set lessons;
private Zlass zlass;
public Zlass getZlass(){
return zlass;
}
public String getStudentId(){
return student_id;
}
public String getName(){
return name;
}
public Address getAddress(){
return address;
}
public java.util.Set getEvents(){
return events;
}
public java.util.Set getLessons(){
return lessons;
}
public void setZlass(Zlass zlass){
this.zlass = zlass;
}
public void setStudentId(String studentId){
this.student_id = studentId;
}
public void setName(String name){
this.name = name;
}
public void setAddress(Address address){
this.address = address;
}
public void setEvents(java.util.Set events){
this.events =events;
}
public void setLessons(java.util.Set lessons){
this.lessons = lessons;
}
}
//配置文件
//----------Zlass.hbm.xml---------------
<hibernate-mapping package="com.softWork.school">
<class name="Zlass" table="class">
<id name="id" column="id" type="string" length="20">
<generator/>
</id>
<property name="className" column="class_name" type="string" length="200"/>
<set name="students" inverse="false" cascade="all">
<key column="class_id"/>
<one-to-many/>
</set>
</class>
</hibernate-mapping>
//-------------Student.hbm.xml---------------
<hibernate-mapping package="com.softWork.school">
<class name="Student" table="student">
<id name="studentId" column="student_id" type="string" length="20">
<generator/>
</id>
<property name="name" type="string" length="20"/>
<component name="address">
<property name="state" column="state" type="string"></property>
<property name="city" column="city" type="string"></property>
<property name="street" column="street" type="string"></property>
</component>
<set name="events" inverse="false" cascade="all">
<key column="student_id"></key>
<one-to-many></one-to-many>
</set>
<set name="lessons" table="student_lesson">
<key column="student_id"/>
<many-to-many column="lesson_id" />
</set>
<many-to-one name="zlass" column="class_id"/>
</class>
</hibernate-mapping>
以上使用的是班级一端维护关系,并级连操作
3. 使用级连操作数据
1) 新增班级
Zlass zlass = new Zlass();
zlass.setId("971002");
zlass.setClassName("机制97-1班");
session.saveOrUpdate(zlass);
2) 为班级新增学生
主动端操作:
Zlass zlass = (Zlass)session.load(Zlass.class,"971002");
Student student = new Student();
student.setStudentId("005");
student.setName("没名");
zlass.getStudents().add(student);
session.saveOrUpdate(zlass);
被动端操作:
Zlass zlass = (Zlass)session.load(Zlass.class,"971002");
Student student = new Student();
student.setStudentId("006");
student.setName("006");
student.setZlass(zlass);
session.saveOrUpdate(student);
3) 删除学生资料
主动端操作:
主动端除非删除自己,并设置了级连才能删除子对象,否则无法完成
//-----以下代码将只删除两者之间的关系,即将学生的class_id设置为null-----
Zlass zlass = (Zlass)session.load(Zlass.class,"971001");
java.util.Iterator iterator = zlass.getStudents().iterator();
if (iterator.hasNext())
zlass.getStudents().remove(iterator.next());
session.saveOrUpdate(zlass);
被动端操作:
Student student = (Student)session.load(Student.class,"002");
session.delete(student);
4) 修改学生资料
通过班级修改学生资料
Zlass zlass = (Zlass)session.load(Zlass.class,"971002");
java.util.Iterator iterator = zlass.getStudents().iterator();
if (iterator.hasNext()){
Student student = (Student)iterator.next();
student.setName("名字已修改");
}
session.saveOrUpdate(zlass);
读取返回的Set型数据:
java.util.Set set = student.getEvents();
java.util.Iterator iterator = set.iterator();
while(iterator.hasNext()){
evt = (Event)iterator.next();
System.out.println(evt.getContent());
System.out.println(evt.getDate().toString());
}
4. 注意:
如果需要从多放引导到一方,需要在一方配置文件中设置inverse=”true”参数,以设定一方到多方的设定是逆向映射,对关联的逆向端所做的修改将不会被持久化。
Inverse=”true”的表示两个实体的关系由对方去维护。
5. 推荐配置,一般的将”一”这一端设置为inverse=”false”,cascade=”all” ,这样一般的操作只需要在”一”这一端操作,此适合于标志性一对多的情况,如销售单和销售明细
如果是非标志性一对多,则一般的将inverse=”false”,cascade=”none”,这样关系永远在主动一端进行控制
示范:假如A对B是一对多,当A中原来有B1,B2,B3,当A中的集合中只包含B1,B2时,那么B中B3的外码将被设置为NULL,这个是CASCADE=“FALSE”的情况下的结果
更多阅读
VPN设备在ADSL设备后端的ipsecvpn配置实例 ipsec vpn配置实例
转载地址:http://hi.baidu.com/uestcxsy/blog/item/a5e2ab35843b740b91ef39e5.html配置需求:总部是静态ip地址,分部是ADSL拨号的动态ip,而且vpn设备在adsl拨号设备后面,问两端如何做ipsecvpn。配置过程:1、配置ISP,R3做为PPPOEserver,主要命
华为防火墙公开课视频 华为防火墙配置实例
华为防火墙公开课,到此结束,公开课课程视频共14节,包括我个人学习的配置文档,我已上传百度网盘,WOLF官方博客有链接,各位可自行下载。由于备课时间较紧,个人对华为防火墙的理解还不是很透彻,视频中难免出现错误,请各位及时给我提出。我和我的
Linux防火墙的配置实例 思科防火墙配置实例
Linux防火墙的配置实例2011年09月23日 星期五 上午 10:10转载自 分享最终编辑 ljx081我们该如何利用Linux操作系统自带的防火墙来提高网络的管理控制功能呢?具体的来说,我们可以分三步走。一是先在Linux服务器上开一个后门,这个后门是
NO.1 N3更多配置曝光 集NFC/OTG/MHL一身 ? MTK之家 哪些手机有nfc和otg
快乐的时光总是短暂的,国庆长假不经意悄然过去了4天,不久前已被曝光于网络的NO.1手机旗下明星产品-NO.1 N3的祥细规格也在这个时间正式公开,该机的核心规格以及真机谍照早有公布,更多细节方面的参数却是很多关注这款新产品的网友最想知
packettracer5.0配置实例 packet tracer5.0汉化
实例4、子网和路由器配置实验拓扑图如下: 对PC0的配置如下:PC>IPCONFIG 192.168.1.1 255.255.255.0192.168.1.2对PC1的配置如下:PC>IPCONFIG 192.168.3.2