Hibernate 添加数据 二 (多对多)
来源:互联网 发布:吉诺比利巅峰数据 编辑:程序博客网 时间:2024/06/05 02:08
Hibernate 添加数据 (多对多)
新增多对多数据
class Person{ private int id ; private String name; private int age ; //多对多 private Set<Works> workSet = new HashSet<>(); //get set 方法省略 }public class Works { private int id; private String name; //多对多 private Set<Person> personSet = new HashSet<Person>();}
配制Person类对应文件清单 Person.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping> <class name="com.Person" dynamic-insert="true" dynamic-update="false" table="t_person_list"> <!-- 主键 --> <id name="id"> <generator class="native"></generator> </id> <!-- 属性 name配制 --> <property name="name" length="51" type="string"></property> <!-- 属性 age配制 --> <property name="age" type="integer"></property> <!-- 多对多配制 --> <!--多对多描述 --> <!--table 中间表 --> <set name="workSet" table="t_p_w_list"> <!--本类对应的外键 --> <key column="p_id"></key> <!--另一方配制 --> <many-to-many class="com.Works" column="w_id"></many-to-many> </set> </class></hibernate-mapping>
配制Works类对应文件清单 Works.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping> <class name="com.Works" dynamic-insert="true" dynamic-update="false" table="t_w_list"> <!-- 主键 --> <id name="id"> <generator class="native"></generator> </id> <property name="name" length="51" type="string"></property> <!--多对多描述 --> <set name="personSet" table="t_p_w_list"> <key column="w_id"></key> <many-to-many class="com.Person" column="p_id"></many-to-many> </set> </class></hibernate-mapping>
新增数据操作 一 (只保存Person)
public void addModel(){ Person person = new Person(); person.setName("xx"); person.setAge(12); Session session = H3Utils.getCurrentSession(); session.beginTransaction(); //保存 //执行save方法 session.save(person); session.getTransaction().commit();}
说明 一:
当执行 save 方法时 会调用一次 insert语句 insert into t_person_list (name, age) values(?, ?)
新增数据操作 二 (只保存Works)
public void addModel(){ Works works = new Works(); works.setName("java"); Session session = H3Utils.getCurrentSession(); session.beginTransaction(); //保存 //当执行save方法的时候 会 session.save(works); session.getTransaction().commit();}
说明 二:
当执行 save 方法时 会调用一次 insert语句 insert into t_w_list (name) values(?)
新增数据操作 三 (保存Person 和 Works Person关联Works 主关联从表 或者 Works关联Person 从关联主)
public void addPersonAndWork1() { Session currentSession = H3Utils.getCurrentSession(); currentSession.beginTransaction(); Person person = new Person(); person.setName("xiaosan1"); person.setAge(121); Works works = new Works(); works.setName("23"); person.getWorkSet().add(works); //保存person currentSession.save(person); currentSession.save(works); currentSession.getTransaction().commit();}
说明 三 :
当执行 currentSession.save(person); 方法时 会调用一次 insert语句 insert into t_person_list (name) values(?)当执行 currentSession.save(works); 方法时 会调用一次 insert语句 insert into t_w_list (name) values (?)最后 commit insert into t_p_w_list (p_id, w_id) values (?, ?)
新增数据操作 四 (保存Person 和 Course 并进行双向关联 设置inverse方式)
这时我们需要设置 多对多中 一方放弃主动维护关系表,比如这里设置Person不去主动维护<!--多对多描述 --> <set name="workSet" table="t_p_w_list" inverse="true"> <key column="p_id"></key> <many-to-many class="android.longs.study.test.Works" column="w_id"></many-to-many> </set>
public void addModel(){ Session currentSession = H3Utils.getCurrentSession(); currentSession.beginTransaction(); Person person = new Person(); person.setName("xiaosan1"); person.setAge(121); Works works = new Works(); works.setName("23"); //person 关联 works person.getWorkSet().add(works); //works 关联 person works.getPersonSet().add(person); //保存person currentSession.save(person); currentSession.save(works); currentSession.getTransaction().commit();}
说明 四 :
当执行 currentSession.save(person); insert into t_person_list (name, age) values(?, ?)当执行 currentSession.save(works);insert into t_w_list (name) values(?)当最后commit时 执行 insert into t_p_w_list (w_id, p_id) values(?, ?)从而建立了主从关系映射
新增数据操作 五 (保存Course 和 Person 并且进行双向关联 使用级联操作 )
可以在 Person.hbn.xml 中对应设置级联保存<!--多对多描述 --> <set name="workSet" table="t_p_w_list" cascade="save-update"> <key column="p_id"></key> <many-to-many class="android.longs.study.test.Works" column="w_id"></many-to-many> </set>
cascade 设置为none , 没有级联操作 设置为 save-update,级连保存或者更新 当save一方的时候,如果这时关联了瞬时态的多方,那么将触发级联操作,将瞬时态的多方转为持久态,也就是多执行了一次insert,最后再执行update 设置为 delete,级连删除 当删除一方的时候,会同时去删除其所关联的多方 设置为 delete-orphan,孤儿删除 设置为 all,代表 可以拥有 save-update 和 delete 总和 cascade 设置为 all-delete-orphan,代表 所有
public void addPersonAndCourseFuoncion1() { Session currentSession = H3Utils.getCurrentSession(); currentSession.beginTransaction(); Person person = new Person(); person.setName("xiaosan1"); person.setAge(121); Works works = new Works(); works.setName("23"); //person 关联 works person.getWorkSet().add(works); //works 关联 person works.getPersonSet().add(person); //保存person currentSession.save(person); currentSession.getTransaction().commit();}
说明 五 :
当执行 currentSession.save(person); insert into t_person_list (name, age) values(?, ?)当执行 currentSession.save(works);insert into t_w_list (name) values(?)当最后commit时 执行 insert into t_p_w_list (w_id, p_id) values(?, ?)从而建立了主从关系映射
0 0
- Hibernate 添加数据 二 (多对多)
- 一对多hibernate 添加数据(二)
- (二十九)hibernate 多对多
- Hibernate 添加数据 一 (一对多)
- Hibernate的数据关联多对多
- hibernate多对多关联数据插入
- hibernate 数据多对一映射
- Hibernate-----多条件查询,多对多添加查询案例
- hibernate 一对一、多对一 双向关联的问题——只能在多的一方添加、修改数据,不能在多的一方修改添加
- hibernate对Blob类型字段进行数据添加
- hibernate如何对Blob类型字段进行数据添加
- Hibernate中manytomany实例二(多对多单向)
- Hibernate 笔记二(多表设计之一对多)
- 深入浅出Hibernate(二)多对一关系映射
- hibernate初探之一对多映射(二)
- 一对多··Hibernate添加数据方式(一)
- Hibernate 一对多添加数据 (XML配置方式)
- Hibernate笔记之6数据关联多对多
- 游戏策划创意设计
- 新闻案例网络版(listview实现)
- Java动态代理实现
- 【Rsync项目实战】备份全网服务器数据
- Appium for Win7 环境搭建
- Hibernate 添加数据 二 (多对多)
- 最小生成树模版题
- C++四种类型转换
- C++多态之动态绑定
- 构建高并发高可用的电商平台架构实践3
- 各类排序算法复杂度、稳定性比较
- Hibernate 查询数据
- Android 测试环境搭建(Win7)
- scala(一)/Haskel(一)