hibernate中cascade和inverse区别
来源:互联网 发布:淘宝直通车退款 编辑:程序博客网 时间:2024/05/29 05:02
cascade 级联操作
-null 默认值
-sava-update
在保存classes对象的时候,针对student进行保存或者更新操作
在更新classes对象的时候,针对student进行保存或者更新操作
-all 包括sava-update和delete
-delete 将classes中的student删除时,将student表中的student删除
inverse 关系操作(设置维护后将为student添加外键数据,不维护外键为null)
-default classes维护classes与student之间的关系
-true classes不维护classes与student之间的关系
-false classes维护classes与student之间的关系
-null 默认值
-sava-update
在保存classes对象的时候,针对student进行保存或者更新操作
在更新classes对象的时候,针对student进行保存或者更新操作
-all 包括sava-update和delete
-delete 将classes中的student删除时,将student表中的student删除
inverse 关系操作(设置维护后将为student添加外键数据,不维护外键为null)
-default classes维护classes与student之间的关系
-true classes不维护classes与student之间的关系
-false classes维护classes与student之间的关系
有两个对象
package cn.xhx.hibernate.domain;import java.io.Serializable;import java.util.Set;public class Classes implements Serializable{private Long cid;private String name;private String description;private Set<Student> students;//关联对象public Long getCid() {return cid;}public void setCid(Long cid) {this.cid = cid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public Set<Student> getStudents() {return students;}public void setStudents(Set<Student> students) {this.students = students;}}
package cn.xhx.hibernate.domain;import java.io.Serializable;public class Student implements Serializable {private Long sid;private String name;private String description;public Long getSid() {return sid;}public void setSid(Long sid) {this.sid = sid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}}
Classes对象的配置文件Classes.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="cn.xhx.hibernate.domain.Classes" table="classes"><id name="cid" length="5"><!-- 主键产生器 -increment 先找到主键的最大值,在最大值的基础上加1,所以该主键必须是数值类型-assigned 在程序中手动设置主键的值-identity 表的自动增长机制,主键必须是数字类型,该效率比increment高,但是id不连续-uuid uuid字符串是由hibernate内部产生的,要求之间必须是字符串类型-sequence 支持oracle的数据库--><generator class="increment"></generator></id><property name="name" length="20"></property><property name="description" length="50"></property><!-- set元素针对的就是Classes类中的set属性cascade 级联操作-null 默认值-sava-update在保存classes对象的时候,针对student进行保存或者更新操作在更新classes对象的时候,针对student进行保存或者更新操作-all 包括sava-update和delete-delete 将classes中的student删除时,将student表中的student删除inverse 关系操作(设置维护后将为student添加外键数据,不维护外键为null)-default classes维护classes与student之间的关系-true classes不维护classes与student之间的关系-false classes维护classes与student之间的关系 --><set name="students" cascade="save-update" inverse="false"><key><column name="cid"></column></key><one-to-many class="cn.xhx.hibernate.domain.Student"/></set></class></hibernate-mapping>
Student.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="cn.xhx.hibernate.domain.Student"><id name="sid" length="5"><generator class="increment"></generator></id><property name="name" length="20"></property><property name="description" length="50"></property></class></hibernate-mapping>
/** * 在更新班级的时候,级联保存学生,并且维护关系,此程序Hibernate的语句如下 * Hibernate: select classes0_.cid as cid0_0_, classes0_.description as descript2_0_0_, classes0_.name as name0_0_ from Classes classes0_ where classes0_.cid=? Hibernate: select students0_.cid as cid0_1_, students0_.sid as sid1_, students0_.sid as sid1_0_, students0_.description as descript2_1_0_, students0_.name as name1_0_ from Student students0_ where students0_.cid=? Hibernate: select max(sid) from Student Hibernate: <strong> 因为在Classes.hbm.xml文件中设置了级联,所以在添加Classes时会级联添加Student <set name="students" cascade="save-update"></strong> insert into Student (description, name, sid) values (?, ?, ?) Hibernate: <strong> 因为在Classes.hbm.xml文件中,inverse没有写,默认classes维护classes与student之间的关系 所以发出了更新关系的update语句为student添加外键</strong> update Student set cid=? where sid=? */ @Test public void testUpdateClasses_Cascade_Save_Student_Inverse(){ Session session = sessionFactory.getCurrentSession(); Transaction transaction = session.beginTransaction(); /* * 给cid为2的班级添加一个学生 */ Classes classes = (Classes)session.get(Classes.class, 2L); Student student = new Student(); student.setName("美女1"); student.setDescription("小林志玲"); /** * 建立班级与学生的关联 */ classes.getStudents().add(student); transaction.commit(); }
0 0
- Hibernate中Inverse和Cascade的区别
- hibernate中cascade和inverse区别
- hibernate中cascade和inverse的区别
- Hibernate中Inverse和cascade的区别
- Hibernate中Cascade和Inverse
- Hibernate中cascade和inverse
- Hibernate中cascade和inverse
- hibernate 中cascade 和inverse
- Hibernate中Cascade和Inverse
- hibernate中cascade和inverse
- hibernate中cascade和inverse
- hibernate中cascade和inverse
- 【转】Hibernate中Cascade和Inverse的区别
- Hibernate中cascade和inverse的区别与用法
- hibernate Inverse 和 cascade的区别
- [转]hibernate---- Inverse 和 cascade区别
- Hibernate-inverse和cascade的区别
- 【Hibernate】inverse和cascade
- rucheng_hjp_tables
- D11
- GNU ERE正则表达式实现方案
- HDU 2120 Ice_cream's world I
- JAVA学习总结(1)
- hibernate中cascade和inverse区别
- 使用JAVA SACLA 开发 Spark SQL DataFrame IMF内部课程
- Windows系统结构的中断(1)
- haproxy redirect prefix
- ZooKeeper系列之三:ZooKeeper的安装
- 你还在用strptime来解析日期时间格式吗?Out了吧
- Spring文档学习--异常处理(Handling exceptions)以Shiro为例
- HDU_ACM_A+B for Input-Output Practice (I)
- grep命令