博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate的数据删除,更改
阅读量:6843 次
发布时间:2019-06-26

本文共 2717 字,大约阅读时间需要 9 分钟。

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

一.数据的删除

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

books.hbm.xml文件不变:

publishers.hbm.xml文件:

在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);                //更改数据,Books        Books book2 = dao.getBook(79);        book2.setTitle("如何成为成功的人士");        dao.updateBooks(book2);
其他不变....

转载地址:http://ptcul.baihongyu.com/

你可能感兴趣的文章
android studio 开发android app 真机调试
查看>>
[stm32] STM32的通用定时器TIMx系统了解
查看>>
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
查看>>
添加php的memcached扩展模块
查看>>
W3wp.exe占用CPU及内存资源
查看>>
Rabbitmq~对Vhost的配置
查看>>
CentOS下Web服务器环境搭建LNMP一键安装包
查看>>
Redis发布订阅实现原理
查看>>
Java魔法堂:JVM的运行模式 (转)
查看>>
thinkPHP四种URL访问方式(二)
查看>>
使用InstallShield打包VS程序
查看>>
我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类...
查看>>
shell正则表达式匹配样例
查看>>
Sublime Text 的安装和配置
查看>>
数据库设计三大范式
查看>>
为了加速应用物联网,IT高管必须做的6件事
查看>>
查看MYSQL中数据表占用的空间
查看>>
栗蔚:中国云计算“风景独好”
查看>>
使用sqlparse分析SQL语句,及自己写的SQL分析语句
查看>>
搭建国际交流平台 黑龙江海外人才工作站涉及3D打印
查看>>