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

其他不变....

时间: 2024-10-21 11:21:06

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

测试:Data Domain拔得重复数据删除头筹

重复数据删除技术不仅能够提高企业存储效率,而且可以减少购买磁带或者磁盘等存储设备的需求,从而进一步节省了数据中心空间.能源和冷却资源. 从广义上讲,重复数据删除是一项分析数据文件.找出和删除冗余信息块.并且采用了g-zip或者LZ等压缩算法的技术.一般来讲,那些经常被编辑但是变更很少的文件是重复数据删除的理想对象.因此,不少企业开始考虑采用重复数据删除解决方案来减少企业数据库.电子邮件.服务器信息以及虚拟机镜像的备份和归档所需的存储空间. Data Domain是重复数据删除市场的领导者之一,所

Hibernate获取数据方式与缓存使用

Hibernate获取数据的方式有不同的几种,其与缓存结合使用的效果也不尽相同,而Hibernate中具体 怎么使用缓存其实是我们很关心的一个问题,直接涉及到性能方面. 缓存在Hibernate中主要有三个方面:一级缓存.二级缓存和查询缓存:一级缓存在Hibernate中对应 的即为session范围的缓存,也就是当session关闭时缓存即被清除,一级缓存在Hibernate中是不可配置 的部分:二级缓存在Hibernate中对应的即为SessionFactory范围的缓存,通常来讲Sessi

Hibernate的数据查找,添加!

1.首先看一下测试数据库的物理模型 2.测试所需要的Hibernate的jar包 3.数据库的sql /*==============================================================*/ /* DBMS name: MySQL 5.0 */ /* Created on: 2015/7/3 23:17:57 */ /*==============================================================*/ dr

企业级大数据备份:十问重复数据删除技术

仅仅在几年以前,重复数据删除还是一个独立的功能,重复数据删除为企业备份和归档部门的存储系统提供另一种选择.同时也在云端网关找到了新的用途,当数据进入阵列或虚拟磁带库之前过滤掉不必要的数据块.现在,它已经成为统一计算系统预先集成的功能.而了解如何更有效的使用这项技术成为一种需求.于此同时IT经理应该重新审视存储问题并询问为其提供存储的供应商. 1. 重复数据删除技术对备份性能将产生什么影响? 对于业务成倍增长的大型企业来说高性能是至关重要的.同时企业还需在有限的备份环境内确保海量数据备份环境的安全

hibernate 多对多删除 中间表记录还在

问题描述 请问一下hibernate 多对多删除一方的记录的时候,为什么中间表的记录没有跟着删除呢,但是我在存入的时候,中间表记录就自动生成了啊 问题补充:UserGroup表private Set<Paper> papers = new HashSet<Paper>();@ManyToMany@JoinTable(name="tm_paper_usergroup",joinColumns={@JoinColumn(name="usergroupid&

Struts2+Hibernate实现数据分页的方法_java

本文实例讲述了Struts2+Hibernate实现数据分页的方法.分享给大家供大家参考,具体如下: 1.用Hibernate实现分页技术: /** * 使用hql语句进行分页查询 * @param hql 需要查询的hql语句 * @param offset 第一条记录索引 * @param pageSize 每页需要显示的记录数 * @return 当前页的所有记录 */ @SuppressWarnings("unchecked") public List findByPage(f

s2sh框架整合,hibernate无法执行删除问题

问题描述 s2sh框架整合,hibernate无法执行删除问题 dao层的代码 public void deleteDepartment(Serializable id,String delMode) { Department department=this.getDepartmentById(id); //通过页面出来的参书id,获得 这个对象 if("del_pre_relation".equals(delMode)){ Set users = department.getUser

Hibernate作为数据持久层的分析和研究

数据 摘要 在Java技术中有许多方法可以对数据进行持久化,持久层也是Java应用程序中最重要的部分之一.本文在分析了3种持久层主流解决方案的基础上,介绍了O-R映射开源项目Hibernate,并介绍了在Web应用开发中怎样配置Hibernate的环境,并使用它建立一个应用. 关键字 hibernate,数据持久化,JDBC, EJB,JDO 数据持久层简介 J2EE的三层结构是指表示层(Presentation),业务逻辑层(Business Logic)以及基础架构层(Infrastruct

外链的起起浮浮是源于搜索引擎的数据删除

前几天百度大更新,许多网站收录和外链成倍增加.但昨天晚上有人在群里聊天说外链大降了,问我这是怎么回事,这刚升上来的外链,怎么会这么快又降下去了呢?真是令人不解啊,我问他你网站的关键词排名有没有下降呢?他说这倒没有,既然没影响,外链下降了就没什么值得大惊小怪的.可是人家硬是不放心,追问我这具体是怎么一回事?当时我也跟它解释了一下其中的缘由,我想可能大家心中也有类似的疑问,今天笔者就为你揭开这神秘的面纱吧. 其实外链也是有生命周期的,就像任何一个生物一样,有生就有死.本来没什么奇怪的,当然这个答案交