一: 前沿:刚刚学习hibernate时,对于inverse很是纠结,不知道什么时候该用什么时候不该用,在网上找了一些资料,说的也很含糊,我都不知道如果写了"inverse=true"时,到底是有谁来维护。下面我来说下自己的最终理解。


   二:我那客户(Customer)和订单(Order)来说,一个客户有多个订单,一个订单属于一个客户。所以在学生的Order.hbm.xml中就是多对一的关系。在Customer中就是一对多。所以给出Customer中德配置如下:

  

<class name="com.shengsiyuan.hibernate.Customer" table="customers">
<id name="id" column="id" type="long">
<generator class="increment"></generator>
</id> <property name="name" type="string">
<column name="name" length=""></column>
</property> <!-- 这里的lazy设置为false,表示立即加载,而不是延迟加载 -->
  这里把Customer。hbm.xml中的inverse设置为true表示客户与订单之间的关系由订单来维护,下面我会在测试类中会说明一些问题
  <set name="orders" cascade="all" inverse="true" lazy="true"> 
  <key column="customer_id"></key>
  <one-to-many class="com.shengsiyuan.hibernate.Order"/> </set>
</class>

在Order.hbm.xml中德配置如下:

  

     <class name="org.wh.hibernate.Order" table="orders">
<id name="id" column="id" type="long">
<generator class="increment"></generator>
</id> <property name="orderNumber" type="string">
<column name="order_Number" length="15"></column>
</property> <many-to-one name="customer" class="org.wh.hibernate.Customer" column="customer_id" lazy="false">
</many-to-one> </class>

在看HiberanteTest中德类的代码:

  

             tx=session.beginTransaction();

             Customer customer=new Customer();

             customer.setName("zhangsan");
customer.setOrders(new HashSet()); Order order1=new Order();
order1.setOrderNumber("order1"); Order order2=new Order();
order2.setOrderNumber("order2"); Order order3=new Order();
order3.setOrderNumber("order3"); //由于是双向一对多的关系 //多到一
--------------如果在这里面没有添加以下三行代码,则会使order表中的外键为空值(null),因为在hbm.xml中我们是让订单表来维护客户和订单之间的关系,而在保存的时候保存的确是
--------------customer对象,所以要在代码中设置order和customer的关系。-------------------------如果把customer中德inverse去掉,即默认为false,那么就不需要加下面--------------几行代码,因为此时的关系是两方都在维护,所以在保存customer时会保存相应的order信息----------------------------------------------------------------------------不能将两边的配置中德inverse都同时设置为true,这样的结果是你让我来管,我要你来管,结果可想而知,。。。。。任何一方的操作都不会触发到对方表的信息
order1.setCustomer(customer);
order2.setCustomer(customer);
order3.setCustomer(customer); //一到多
customer.getOrders().add(order1);
customer.getOrders().add(order2);
customer.getOrders().add(order3); session.save(customer);
tx.commit();

三:在说cascade中德作用,cascade就是级联的意思,就是说在保存主对象时,相应的从属对象也要保存,删除主对象时,那么相应的从属对象也要被删除。就拿上述的Customer和Order两张表来说,在Customer.hbm.xml中德cascade=“all”,表示操作customer时,会保存相应的order信息,所以如果删除该customer,那么对应的Order表的信息也会删除。暂时我的理解就是这样,向cascade还有好几种属性,save-update等会再以后细作说明。  


四:感悟:通过这几天的学习,觉得hibernate的配置还是很麻烦的,马上都快实习的,觉得时间不够用,而且最近对那些jquery,json都不是很理解,那种写法,好郁闷阿。OGBL自己还得在理解一边,每天还得去上课,真的好烦人啊。最近上extsj,老师一节课就把书给上完了,晕死。还是自己学吧。路漫漫啊。一步一个脚印吧。GO!Go!Go!,预祝自己学的好,并且找到一份好的实习工作吧。


Hibernate中inverse、cascade的说明的更多相关文章

  1. Hibernate中inverse="true"的理解

    Hibernate中inverse="true"的理解 举例如下 转自:http://lijiejava.iteye.com/blog/776587 Customer类: publ ...

  2. Hibernate中inverse属性与cascade属性

    Hibernate集合映射中,经常会使用到"inverse"和"cascade"这两个属性.对于我这样,Hibernate接触不深和语文水平够烂的种种因素,发现 ...

  3. hibernate中 inverse的用法(转载)

    http://blog.csdn.net/xiaoxian8023/article/details/15380529 一.Inverse是hibernate双向关系中的基本概念.inverse的真正作 ...

  4. hibernate 标签inverse cascade

    inverse设立不当会导致性能低下,其实是说inverse设立不当,会产生多余重复的SQL语句甚至致使JDBC exception的throw.这是我们在建立实体类关系时必须需要关注的地方.一般来说 ...

  5. MySql和Hibernate中关于cascade的用法

    数据库里的cascade的用法,Mysql和Hibernate里面是不相同. 在数据库里,进行增加.修改.删除记录的时候,经常会涉及到父子关系的表. 例如:有省份表和城市表,其中城市表有一个外键pro ...

  6. hibernate中的cascade和inverse

    以Student和class为例,一个Student对应一个class,一个class对应多个Student. Student.hbm.xml <?xml version="1.0&q ...

  7. 一口一口吃掉Hibernate(八)——Hibernate中inverse的用法

    一.Inverse是hibernate双向关系中的基本概念.inverse的真正作用就是指定由哪一方来维护之间的关联关系.当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之 ...

  8. 在 Hibernate 中inverse的属性

    hibernate配置文件中有这么一个属性inverse,它是用来指定关联的控制方的.inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联由对方控制.见例子: 一 ...

  9. hibernate中inverse作用

    默认 inverse="false"即该元素指向的类负责维护该关系. 如: <hibernate-mapping> <class name="com.h ...

随机推荐

  1. 大数据培训班 cloudera公司讲师面对面授课 CCDH CCAH CCP

    大数据助力成就非凡.大数据正在改变着商业游戏规则,为企业解决传统业务问题带来变革的机遇.毫无疑问,当未来企业尝试分析现有海量信息以推动业务价值增值时,必定会采用大数据技术. 目前对大数据的分析工具,首 ...

  2. anaconda虚拟环境操作

    1.首先在所在系统中安装Anaconda.可以打开命令行输入conda -V检验是否安装以及当前conda的版本. 2.conda常用的命令. 1)conda list 查看安装了哪些包. 2)con ...

  3. 使用Entity Framework时,序列化出错

             在使用Entity Framework时,如果数据库中有两个表是一对多或者是多对多的关系,那么生成的实体类中就有一个导航属性.这个导航属性前面都加上了一个virtual关键字.这个v ...

  4. DDoS 攻击与防御:从原理到实践(下)

    欢迎访问网易云社区,了解更多网易技术产品运营经验. DDoS 攻击与防护实践 DDoS 攻击的实现方式主要有如下两种: 自建 DDoS 平台 现在有开源的 DDoS 平台源代码,只要有足够机器和带宽资 ...

  5. 『Golang』MongoDB在Golang中的使用(mgo包)

    有关在Golang中使用mho进行MongoDB操作的最简单的例子.

  6. Python 3基础教程25-异常处理

    在Python中,异常处理,主要是try except语句,通常语法格式如下. try: 代码块1 except Exception as e: print(e) 代码2 接着前面读取CSV文件,如果 ...

  7. Django2.1.3框架中(fields.E300)和(fields.E307)报错处理

    使用Django框架创建了Web项目,修改了模型models.py之后,执行数据库迁移操作,出现如下报错: models.py内容如下: from django.db import models fr ...

  8. Structure From Motion(SFM,从运动恢复结构)

    Structure From Motion(SFM,从运动恢复结构) 阅读相关文献: Wu et al. Multicore Bundle Adjustment Agarwal et. al. Bun ...

  9. Go基础篇【第1篇】: 内置库模块 OS

    os包提供了操作系统函数的不依赖平台的接口.设计为Unix风格的,虽然错误处理是go风格的:失败的调用会返回错误值而非错误码.通常错误值里包含更多信息.os包的接口规定为在所有操作系统中都是一致的.非 ...

  10. 【iOS开发】iOS对UIViewController生命周期和属性方法的解析

    iOS对UIViewController生命周期和属性方法的解析 一.引言 作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有 ...