ssh框架下的关联表删除(级联删除)

来源:互联网 发布:上海专业seo 编辑:程序博客网 时间:2024/06/05 07:02

       为了完善一个删除功能,期间遇到一些麻烦,希望记录下来,日后回头看会有所帮助,记一次成长,也是第一次写博客。

      首先,页面方面使用的是dwz,我是初次接触而且刚开始工作不久,了解不是很深,但是一些功能的搭建是页面开发起来很方便,正如dwz介绍那样,省去开发人员写js的麻烦。

     其次,本次项目使用的是SSH框架,我是新人,框架方面就此省略。网上有很多相关知识,框架的搭建,各部分的功能,业务逻辑配置等都很详细。

     实现删除功能时,用的是底层自带的delete方法,所以相对于写新的del()底层delete让我作为了第一选择,但是关联表一开始没有配置,也不是我配置的,所以配置方面较晚发现,经验不足的表现,大局观不强。

    下面附带一些知识吧,以备以后使用:


下边我们来看下cascade的取值:

Cascade属性的取值有:

1、none:忽略其他关联的对象,默认值。

2、save-update:当session通过save(),update(),saveOrUpdate()方法来保存或更新对象时,级联保存所有关联的新建的临时对象,并且级联更新所有关联的游离对象。

3、persist:当session通过persist()方法来保存当前对象时,会级联保存所有关联的新建的临时对象。

4、merge:通过Session的merge()方法来保存当前对象时,会级联融合所有关联的游离对象。

5、delete:通过delete()删除当前对象时,会级联删除所有关联的对象。

6、lock:通过lock()把当前游离对象加入session缓存时,会把所有的游离对象也加入Session缓存中。

7、replicate:通过replicate()复制当前对象时,会级联复制所有关联的对象。

8、evict:通过evict()清除session缓存中对象时,会级联清除所有关联的对象。

9、refresh:通过refresh()刷新当前对象时,会级联刷新所有关联的对象。(刷新是指同步更新session缓存中数据)

10、all:save-update(),persist(),merge(),delete(),lock(),replicate(),evict()及refresh()的行为。

11、delete-orphan,删除所有和当前对象时,解除关联行为的对象。

12、all-delete-orphan; 通过delete()删除当前对象时,会级联删除所有关联的对象。


      再说一个比较坑的地方:我看到说把lazy改为true,坑的地方来了,项目中的lazy只有false、proxy、no-proxy三种,顿时头脑发热感觉此路不通,心情很不爽……

                                                                                                             

Inverse是hibernate双向关系中的基本概念。inverse的真正作用就是指定由哪一方来维护之间的关联关系。当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系。
  Hibernate仅仅按照主控方对象的状态的变化来同步更新数据库。按照原来的映射文 件,people.getAddresses().add(address),即主控方对象的状态发生了改变,因此数据库会跟着对象状态的变化来同步更新 数据库;而address.setPeople(people),即被控方对象的状态发生了改变,它是不能触发对象和数据库的同步更新的。

  举个最简单的一对多父子关系。那么代码就写成:


  父亲中的关系映射

{set name="children" lazy="true" inverse="true"}

      {key column="parent_id"/}

      {one-to-many class="test.Child"/}

{/set}

  儿子中关系映射


{many-to-one name="parent" column="parent_id" not-null="true"/}

Parent p = new Parent();


Child c = new Child();


c.setParent(p);  //维护父子之间关系


p.getChildren().add(c);


  session.save(p);


session.flush();


  注意:{many-to-one}总是设成“inverse=false”的,而且这个属性在Mapping中是不存在的!


  这样运行的下来的结果就是:


  Hibernate: insert into parent (id) values (?)


Hibernate: insert into child (parent_id, id) values (?, ?)


  那么假如c.setParent(p)注释掉,结果就是:


  Hibernate: insert into parent (id) values (?)


DWZ开发文档:http://www.yq1012.com/dwz/


SSH综合知识:https://www.cnblogs.com/hww123/p/5852086.html(原文作者:一念成执着)


就这样吧,以后可能会总结的更多更精华,写博客的习惯也会慢慢养成!







阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 坐高铁带龟被扣怎么办 晕动车怎么办 孕妈涨奶怎么办 发质硬发量多怎么办 手机网怎么办 留党察看怎么办 腿上长阳子怎么办 泰迪日天怎么办 出糗怎么办 lnvalidargument怎么办 鬼冢虎掉漆怎么办 鬼冢虎鞋破皮怎么办 糖耐高怎么办 糖耐量高怎么办 糖耐值高怎么办 有魏氏环怎么办 手都能摸曼月乐环尾丝怎么办 腰骶疼怎么办 交通肇事罪怎么办 砸车不赔怎么办 怎么办取保候审 车机盖被砸个坑怎么办 肛裂痒怎么办 痔核嵌顿怎么办 左肾错构瘤怎么办 竖叉掀胯怎么办 贝斯打品怎么办 长板太重怎么办 吃太撑怎么办 眨眼睛怎么办 字太丑怎么办 白钢门响怎么办 药流后有积血怎么办 猫炸毛怎么办 小奶猫超凶怎么办 吐完还想吐怎么办 很傻白甜怎么办 虾会跳怎么办 微博被挂怎么办 微博被骂怎么办 脸太方怎么办