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

一.数据的删除

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

其他不变....

Hibernate的数据删除,更改的更多相关文章

  1. Hibernate 插入,修改,删除,查询语句

    /* *具体操作hibernate的类 *增加,删除,修改,按ID查询,模糊查询,查询全部 **/ public class PersonOperate { //在hibernate中所有操作都是由S ...

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

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

  3. python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API

    python  Django教程  之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...

  4. hibernate有关联关系删除子表时可能会报错,可以用个clear避免错误

    //清除子表数据 public SalesSet removeSalesSetDistributor(SalesSet salesSet ){ List<SalesSetDistributor& ...

  5. Django 数据表更改

    Django 数据表更改 « Django 开发内容管理系统(第四天) Django 后台 » 我们设计数据库的时候,早期设计完后,后期会发现不完善,要对数据表进行更改,这时候就要用到本节的知识. D ...

  6. 【Hibernate】数据Session对象的常规操作收集

    因为Hibernate是ORM(对象关系映射)的,所以程序员是不需要写Sql语句的.所有的操作都是通过对对象的操作. 1,原生Session 事务管理 Transaction tx = session ...

  7. Hibernate修改操作 删除操作 查询操作 增加操作 增删改查 Hibernate增删查改语句

    我用的数据库是MySQL,实体类叫User public class User { private Integer uid; private String username; private Stri ...

  8. vue element-ui el-date-picker 数据可以更改,但是前端不显示的更改后的数据问题

    template: <el-form-item label="有效时间:" prop="validTime">                    ...

  9. Dynamic CRM一对多关系的数据删除时设置自动删除关联的数据

    在业务实体中主子表非常常见,然后子表可能有会有自己的子表或者多对多关系,在删除的业务场景下,删除主数据,剩余的子数据就成了脏数据, 之前的做法是,监听主表的删除事件,然后在插件中找到其下的子表数据然后 ...

随机推荐

  1. Notepad++ 默认快捷键

    Notepad++绝对是windows下进行程序编辑的神器之一,要更快速的使用以媲美VIM,必须灵活掌握它的快捷键,下面对notepad++默认的快捷键做个整理(其中有颜色的为常用招数):     1 ...

  2. 基于XML配置的spring aop增强配置和使用

    在我的另一篇文章中(http://www.cnblogs.com/anivia/p/5687346.html),通过一个例子介绍了基于注解配置spring增强的方式,那么这篇文章,只是简单的说明,如何 ...

  3. javascript keycode大全

    keycode    8 = BackSpace BackSpacekeycode    9 = Tab Tabkeycode   12 = Clearkeycode   13 = Enterkeyc ...

  4. asp.net实现数据库版动态网页滑动门

    前端: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="滑动门.aspx.c ...

  5. sublime下安装ctags

    sublime下安装ctags 标签: sublime   当我们阅读代码时, 会遇到很多不明确的函数名, 此时, 我们需要查看这个函数的定义的地方, 在sublime下我们需要安装一个插件, Cta ...

  6. composer安装

    1.首先到php.net下载对应版本的php,zip版本即可,注意windows需要vc11运行库支持 2.配置path路径添加对php解压目录的引用 3.将php.ini-development  ...

  7. js生成二维码 中间有logo

    描述: jquery.qrcode.js 是一个能够在客户端生成矩阵二维码QRCode 的jquery插件 ,使用它可以很方便的在页面上生成二维条码.此插件是能够独立使用的,体积也比较         ...

  8. Mina入门实例(一)

    mina现在用的很多了,之前也有用到,但是毕竟不熟悉,于是查了一些资料,做了一些总结.看代码是最直观的,比什么长篇大论都要好.不过其中重要的理论,也要理解下. 首先是环境,程序运行需要几个包,这里用m ...

  9. SSH实战 · JAVA发送邮件相关

    发送激活邮件 电子邮箱:邮件服务器上的一块空间: 邮件服务器:类比于web服务器(tomcat),有相应的服务器软件: 邮件协议:大公司发送和接收服务器分开,也可以都用一个服务器.           ...

  10. [Linux] linux下安装配置 zookeeper/redis/solr/tomcat/IK分词器 详细实例.

    今天 不知自己装的centos 出现了什么问题, 一直卡在 启动界面, 找了半天没找见原因(最后时刻还是发现原因, 只因自己手欠一怒之下将centos删除了, 而且选择的是在本地磁盘也删除. ..让我 ...