其他未给出代码,请参考上一篇....

一.数据的删除

方法1.从“多”的一方进行数据的删除

books.hbm.xml文件不变:

<many-to-one name="publishers" column="publisherId" class="com.entry.Publishers" lazy="false"cascade="save-update"/>

publishers.hbm.xml文件:

<set name="books" lazy="false" cascade="all" inverse="true"> <!-- cascade="save-update" 也可以 --><key column="publisherId" not-null="true"/><one-to-many class="com.entry.Books"/></set>

在MyHibernateDao.java中添加如下代码:

public Books getBook(int Id){Books book = null;Session session = HibernateSessionFactory.getSession();Transaction tran = session.beginTransaction();book = (Books)session.get(Books.class, new Integer(Id));tran.commit();return book;}public void deleteBook(Books book){Session session = HibernateSessionFactory.getSession();Transaction tran = session.beginTransaction();session.delete(book);tran.commit();}

在HibernateServlet.java中添加如下代码

        Books book1 = dao.getBook(3);book1.getPublishers().getBooks().remove(book1);book1.setPublishers(null);dao.deleteBook(book1);    

注意如果没有book1.getPublishers().getBooks().remove(book1); book1.setPublishers(null);这两句,会出现 org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)这个异常,主要是因为Books和Publishers二者的级联关系。

所以我们可以先将级联断开,然后再进行删除“多”的一方。

方法2.从“一”的这一方进行删除,这样的话就是和“一”这一方相关联的“多”的一方都会被删除

在HibernateServlet.java中添加如下代码:

Publishers publisher = dao.getPublisher(1);
dao.deletePublisher(publisher);

publishers.hbm.xml 和 books.hbm.xml 不用改变

在MyHibernateDao.java中添加如下代码:

public Publishers getPublisher(int Id){Publishers publisher = null;Session session = HibernateSessionFactory.getSession();Transaction tran = session.beginTransaction();publisher = (Publishers)session.get(Publishers.class, new Integer(Id));tran.commit();return publisher;}public void deletePublisher(Publishers publisher){Session session = HibernateSessionFactory.getSession();Transaction tran = session.beginTransaction();session.delete(publisher);tran.commit();}

二.数据的删除

在MyHibernateDao.java中添加如下代码:

public void updateBooks(Books book){Session session = HibernateSessionFactory.getSession();Transaction tran = session.beginTransaction();session.update(book);tran.commit();}

在HibernateServlet.java中添加如下代码

     //更改数据, 更改对应的外键Books book1 = dao.getBook(79);//将book1的publisherId替换成46/较为安全的写法,然而并不知道有什么卵用Publishers px = dao.getPublisher(book1.getPublishers().getPublisherId());px.getBooks().remove(book1);Publishers py = dao.getPublisher(46);py.getBooks().add(book1);/
        book1.setPublishers(py);dao.updateBooks(book1);//更改数据,BooksBooks book2 = dao.getBook(79);book2.setTitle("如何成为成功的人士");dao.updateBooks(book2);

其他不变....

转载于:https://www.cnblogs.com/hujunzheng/p/4620968.html

Hibernate的数据删除,更改相关推荐

  1. hibernate脏数据_Hibernate性能提示:脏收集效果

    hibernate脏数据 在使用Hibernate作为ORM开发服务器和嵌入式应用程序8年后,我全力以赴地寻求提高Hibernate性能的解决方案,阅读博客和参加会议,我决定与您分享在这些年中获得的知 ...

  2. Hibernate的数据查找,添加!

    1.首先看一下测试数据库的物理模型 2.测试所需要的Hibernate的jar包 3.数据库的sql /*=============================================== ...

  3. Hibernate Shards 数据的水平、垂直切割(二)- Hibernate Shards基本演示

    准备 1. 以Hibernate Shards 数据的水平.垂直切割(一)- Hibernate测试环境的项目为基础 2. Hibernate Shards使用了commons logging,下载个 ...

  4. [JAVAWEB实战篇]---Hibernate实现级联删除

    Hibernate实现级联删除 版权所有,转载请注明出处zhyiwww@163.com 我的使用背景: v有新闻和新闻类型,一条新闻只能属于一个类型,一种新闻类型可以对应多条新闻. v在数据库中,新闻 ...

  5. Windows 8.1 重复数据删除——规划部署(二)

    一.规划部署目标    Windows 8.1&Server 2012 的重复数据删除设计为安装到主要数据卷上,而无需添加任何附加的专用硬件.这意味着你可以安装和使用该功能,而不会影响服务器上 ...

  6. hibernate脏数据_Hibernate脏检查的剖析

    hibernate脏数据 介绍 持久性上下文使实体状态转换入队 ,该实体状态转换在刷新后转换为数据库语句. 对于托管实体,Hibernate可以代表我们自动检测传入的更改并安排SQL UPDATE. ...

  7. Hibernate 添加数据 二 (多对多)

    Hibernate 添加数据 (多对多) 新增多对多数据 class Person {private int id ;private String name;private int age ;//多对 ...

  8. Hibernate 添加数据 一 (一对多)

    Hibernate 添加数据 (一对多) 类级别检索:当前对象所有属性值.例如:Customer自己数据 关联级别检索:当前对象关联对象数据.例如:Customer 关联 Order 数据 1 新增普 ...

  9. c++删除数组中重复元素_PG13中的功能—B树索引中的重复数据删除

    PostgreSQL 13 Beta 1版本于2020年5月21日发布,PostgreSQL 13 Beta 2版本于2020年6月25日发布.虽然Beta 版本中依旧包含一些错误,但是它总是几乎涵盖 ...

最新文章

  1. python运行不了control+shift+i_Python不支持 i ++ 语法的原因解析
  2. React 深度学习:ReactFiberLazyComponent
  3. 面试问烂的 MySQL 四种隔离级别,看完吊打面试官!
  4. 科大星云诗社动态20210323
  5. 7-28 搜索树判断 (25 分)(思路加详解) just easy!
  6. java游戏运行环境_Java运行环境
  7. linux性能诊断,linux下跟性能相关的命令以及系统性能诊断
  8. ext中的EXT.XTemplate()
  9. Leetcode每日一题:190.reverse-bits(颠倒二进制位)
  10. 计算机工程学院运动会方阵口号,运动会方阵口号(精选多篇)
  11. linux手动注入网络数据_Linux网络 - 数据包的接收过程【转】
  12. 常见Linux版本概览
  13. 从OpenGL ES 2.0到Direct3D 11.1之路
  14. 驱动加载工具(InstDrv - V1.3中文版)
  15. 财务分析报表APP的功能优势
  16. sqlplus连mysql库_sqlplus连接数据库
  17. 记录LM3886制作辛酸历程
  18. 书单来了!大厂的技术牛人在读什么:华为篇
  19. 天津高清卫星影像数据包下载
  20. atan、atanf、atanl、atan2、atan2f、atan2l

热门文章

  1. 计算机模拟数学实验动画,计算机图形学实验-简单动画的实现、三维图形变换.docx...
  2. TortoiseGit 本地仓库和远程仓库建立联系_入门试炼_02
  3. 省培计算机实践作业,计算机软件基础强化实践能力培养实践部分考核作业.doc...
  4. java 百度api接口开发_百度熊掌号使用Java工具类对接API推送接口进行文章推送实例详解...
  5. linux xguest用户,在/etc/passwd中得到普通用户列表
  6. php 内存队列,memcache构建简单的内存消息队列_PHP教程
  7. setGeometry: Unable to set geometry 493x379+674+326 (frame: 517x443+662+274) on QWidgetWindow/“Dialo
  8. BugkuCTF-MISC题cisco(writeup)
  9. git 拉取远端仓库_git命令-远程仓库拉取、本地仓库更新、工作空间提交等等
  10. linux生成图片快捷方式,在Deepin Linux系统下给AppImage格式软件创建快捷方式的方法...