Hibernate的数据删除,更改

简介:

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

一.数据的删除

方法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);

其他不变....
目录
相关文章
|
7月前
|
XML Java 数据库连接
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
121 0
|
3月前
|
Java 数据库连接 API
解锁高效开发秘籍:深入探究 Hibernate 如何优雅处理一对多与多对多关系,让数据映射再无烦恼!
【9月更文挑战第3天】Hibernate 是 Java 领域中最流行的 ORM 框架之一,广泛用于处理实体对象与数据库表之间的映射。尤其在处理复杂关系如一对多和多对多时,Hibernate 提供了丰富的 API 和配置选项。本文通过具体代码示例,展示如何使用 `@OneToMany`、`@JoinColumn`、`@ManyToMany` 和 `@JoinTable` 等注解优雅地实现这些关系,帮助开发者保持代码简洁的同时确保数据一致性。
52 4
|
4月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
93 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
4月前
|
Java 数据库连接 数据库
从零到精通:揭秘 Hibernate 构建持久层服务的全过程,你离数据持久化大师还有多远?
【8月更文挑战第31天】本文详细介绍了如何从零开始使用 Hibernate 构建一个持久层服务。首先,通过在 Maven 项目中添加必要的依赖,确保项目具备使用 Hibernate 的条件。接着,配置 `hibernate.cfg.xml` 文件以连接 MySQL 数据库,并设置了基本属性。然后定义了一个简单的 `User` 实体类及其映射关系。此外,还创建了一个 `HibernateUtil` 工具类来管理 `SessionFactory`。
42 0
|
4月前
|
Java 数据库连接 数据库
强强联手!JSF 与 Hibernate 打造高效数据访问层,让你的应用如虎添翼,性能飙升!
【8月更文挑战第31天】本文通过具体示例详细介绍了如何在 JavaServer Faces (JSF) 应用程序中集成 Hibernate,实现数据访问层的最佳实践。首先,创建一个 JSF 项目并在 Eclipse 中配置支持 JSF 的服务器版本。接着,添加 JSF 和 Hibernate 依赖,并配置数据库连接池和 Hibernate 配置文件。然后,定义实体类 `User` 和 DAO 类 `UserDAO` 处理数据库操作。
62 0
|
Oracle Java 关系型数据库
hibernate在分层架构中修改数据(update)时遇到的问题!!
hibernate在分层架构中修改数据(update)时遇到的问题!!
|
缓存 Java 数据库连接
hibernate+oracle+servlet实现插入数据的时候,不立马显示!!
hibernate+oracle+servlet实现插入数据的时候,不立马显示!!
|
Java 数据库连接
Java:hibernate-validator验证数据
Java:hibernate-validator验证数据
111 0
|
SQL Java 数据库连接
hibernate 根据某一列数据去重
hibernate 根据某一列数据去重