Hibernate第三天
来源:互联网 发布:免费横道图绘制软件 编辑:程序博客网 时间:2024/06/06 07:45
学习了两天的hibernate不知道对你是否有很大的帮助今天是学习hibernate的最后一天,接下来我就要开始做一些实战项目,今天的主要的内容就是学习一下关于hibernate中的级联操作
首先我们先来了解一下hibernate中的级联操作
级联操作:casecade
save-update:级联保存更新
delete:级联删除 比如删除客户也可以把联系人删除
all:save-update+delete :级联删除和级联保存
级联操作好处:简化操作,少些代码
结论:简化操作。一定要用的话,一般用save-update 不建议使用delete,级联删除很危险。
举例:进行级联删除的例子
// 测试删除客户时候,级联删除客户一下的联系人**
一般在级联的时候我们有如下两种情况
一:一对多(多对一)
一对多一般会在如下两湖总情况下体现
1.实体类中一对多中的“一”
“`
private Set linkMens = new HashSet();
2.实体类中“多”的一方如下
private Customer customer;
3.一对多在orm 映射文件应该如下写![这里写图片描述](http://img.blog.csdn.net/20170428161858167?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5pcXVld2VpbWVpanVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)4.多对一orm映射文件应该这样写![这里写图片描述](http://img.blog.csdn.net/20170428162342077?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5pcXVld2VpbWVpanVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 二:多对多 1.多对多中实体文件这样写
private Set<Role> roles=new HashSet<Role>();
2.多对多中另个多也应该这样写
private Set user=new HashSet();
3.多对多的orm映射配置文件![这里写图片描述](http://img.blog.csdn.net/20170428162833580?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5pcXVld2VpbWVpanVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)4.另一个orm映射配置文件![这里写图片描述](http://img.blog.csdn.net/20170428163009284?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5pcXVld2VpbWVpanVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)注意多对多是两个操作一个表一般情况只有一个inverse属性设置为true。都设置为true就报主键冲突,因为这两个是共同操作第三个表。多对多表在实际应用中的java语法测试
package com.hibernate.many2many.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.hibernate.test.domain.Role;
import com.hibernate.test.domain.User;
import com.hibernate.utils.HibnerateUtils;
//多对多关系操作
public class Demo {
// 保存员工以及角色@Testpublic void demo3() { // 获取session Session session = HibnerateUtils.opensession(); // 开启事务 Transaction transaction = session.beginTransaction(); // 执行操作 // ------------------------------------------------- // 1.创建两个User User u1 = new User(); u1.setUser_name("张明三"); User u2 = new User(); u2.setUser_name("金假的"); // 2.创建两个Role Role r1 = new Role(); r1.setRole_name("保洁"); Role r2 = new Role(); r2.setRole_name("保安"); // 3.用户表达关系 u1.getRoles().add(r1); u1.getRoles().add(r2); u2.getRoles().add(r1); u2.getRoles().add(r2); // 4.角色表达关系 r1.getUser().add(u1); r1.getUser().add(u2); r2.getUser().add(u1); r2.getUser().add(u2); // 5.调用save方法依次保存 session.save(u2); session.save(u1); session.save(r1); session.save(r2); // ---------------------------------------------- // 提交事务 transaction.commit(); // 关闭资源 session.close();}// 为张明三添加角色@Testpublic void demo4() { // 获取session Session session = HibnerateUtils.opensession(); // 开启事务 Transaction transaction = session.beginTransaction(); // 执行操作 // ------------------------------------------------- // 1.获取张明三用户 User u = session.get(User.class, 2l); // 2.创建公关角色 Role r = new Role(); r.setRole_name("公关"); // 3.将角色添加到user对象中 u.getRoles().add(r); // 由于我们在Customer.hbm.xml文件中使用了级联:casecade:save-update 所以下边一行代码可以设舍弃 // session.save(r); // ---------------------------------------------- // 提交事务 transaction.commit(); // 关闭资源 session.close();}// 为张明三解除一个角色@Testpublic void demo5() { // 获取session Session session = HibnerateUtils.opensession(); // 开启事务 Transaction transaction = session.beginTransaction(); // 执行操作 // ------------------------------------------------- // 1.获取张明三用户 User u = session.get(User.class, 2l); // 2.获取要操作的角色对象 Role role = session.get(Role.class, 1l); Role role2 = session.get(Role.class, 2l); // 3.将角色从用户的角色集合中移除 u.getRoles().remove(role2); u.getRoles().remove(role); // ---------------------------------------------- // 提交事务 transaction.commit(); // 关闭资源 session.close();}
}
“`
- hibernate第三天
- Hibernate第三天
- Hibernate第三天
- ## Hibernate框架第三天 ##
- Hibernate第三天
- Hibernate学习第三天
- Hibernate第三天
- Hibernate框架基础知识第三天
- hibernate学习第三天笔记
- spring+hibernate学习的第三天
- hibernate学习笔记第三天(1)
- hibernate学习笔记第三天(2)
- Hibernate学习笔记(第三天)
- 笔记·Hibernate框架第三天
- Hibernate框架第三天(关联映射关系)
- 第三天
- 第三天
- 第三天
- react native listview 实现下拉刷新(RefreshControl)
- 单链表总结
- Linux 用户基础
- windows查看端口占用以及关闭相应的进程
- Oracle_创建用户、表空间、分配表空间、授权
- Hibernate第三天
- PHP环境搭建的问题
- poj 2299 归并排序求逆数
- vxWorks 消息队列
- Java多线程/并发09、浅谈volatile
- BZOJ 4236 JOIOJI
- servlet中web.xml配置
- unity打印日志到文件
- Session的使用和Session的生命周期