zoukankan      html  css  js  c++  java
  • Hibernate中级联操作cascade选项

    Hibernate中级联操作cascade选项<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

     

    none:在保存、更新或删除对象时,忽略其他关联的对象。他是cascade属性的默认值。

    save-update:当通过Sessionsave()update()以及saveOrUpdate()方法保存或更新当前对象是,级联保存所有关联的新建的临时对象,并且级联更新所有关联的游历对象。

    delete:当通过Sessiondelete()方法删除当前的对象是,级联删除所有关联的对象。

    all:包含save-update以及delete的行为。此外,对当前对象执行evict()lock()操作时,也会对所有关联的持久话对象执行evict() lock()操作。

    delete-orphan:删除所有和当前对象解除关联关系的对象。

    all-delete-orphan:包含all delete-ophan

     

    注意,很多人在使用Session对象的delete()方法时,设置了<set cascade=”delete”>,如下示例删除图书的一个分类:

    Category c = new Category();

    c.setId(11);

    session.delete(c);

    结果没有任何动静,那是因为删除操作没有放在一个事务里面。

    Transaction tran = session.beginTransaction();

    Category c = new Category();

    c.setId(11);

    session.delete(c);

    tran.commit();

    加了事务后,能够删除分类表的数据了。但是对应此分类的图书的数据却只是将关联的分类ID修改为了null,并没有真正删除。这是为什么呢?主要就是因为我们这里的Category对象只是一个临时对象。它在删除之前会被持久化,但它所关联的图书对象却不会被自动持久化。那如何是好?我们修改一下实现代码:

    Transaction tran = session.beginTransaction();

    Category c = (Category) session.get(Category.class, 11);

    session.delete(c);

    tran.commit();

    这样子就能够级联删除分类和此分类下的图书数据了。

  • 相关阅读:
    Vue路由机制
    谷歌浏览器打不开应用商店的解决方法
    Vue报错——Component template should contain exactly one root element. If you are using vif on multiple elements, use velseif to chain them instead.
    Vue.js学习之——安装
    Vue使用axios无法读取data的解决办法
    关于localstorage存储JSON对象的问题
    2013年整体计划
    个人喜欢的警语收集
    Linux防火墙的关闭和开启
    Flex修改title 转载
  • 原文地址:https://www.cnblogs.com/CharmingDang/p/9663823.html
Copyright © 2011-2022 走看看