一: 前沿:刚刚学习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. L009文件属性知识详解小节

    本堂课分为5部分内容 1.linux下重要目录详解 2.PATH变量路径内容 3.linux系统中文件类型介绍 4.linux系统中文件属性详细介绍 5.linux系统文件属性inode与block知 ...

  2. ArcPy:GeoJSON转ArcGIS Geometry

    import arcpy geojson = {"type":"Polygon","coordinates":[[[120.81878662 ...

  3. Qt Qwdget 汽车仪表知识点拆解6 自定义控件

    先贴上效果图,注意,没有写逻辑,都是乱动的 这里说一下控件自定义 图中标出的部分都是自定义的控件 这里如果我们有批量类似的功能,就可以使用自定义控件的方式,这里我已下面的自定义控件说一下,上面的在上一 ...

  4. 虚拟现实-VR-UE4-创建C++版工程

    首先,创建C++版本的UE4 项目工程,我使用的是4.12.3版本,据了解,新版本后面的编译都是vs2015 所以,想要创建C++版本的工程,就需要安装vs2015 至于vs2015的安装,自己百度吧 ...

  5. 菜鸟级appium 必看

    之所以写这个,因为太多新人,appium环境半天都搭建不好,版本问题,兼容问题等等. 自己的解决方案:1 官网下载nodejs,建议安装长期支持版 2 进入appium官网,点击下载,跳转到githu ...

  6. create subnet

    子网相关功能点: 模块 功能 描述 备注 子网 创建子网 创建一个子网   设置子网网段范围   设置子网网关IP/不开启网关   给子网开启/关闭dhcp   设置子网dns   修改子网 修改子网 ...

  7. BST插入与查找

    B树: 二叉查找树,所有左节点都比父节点要小,所有右节点都比父节点要大.查找,插入的时间复杂度为O(logn) public class BTreeTest { public static int[] ...

  8. MySQL中Alter用法小结

    alter 方法是我们在处理MySQL数据库中一个常见的方法,能帮助我们更好的处理数据库中的表 1.增加 数据库中表的字段:alter table table_name add [column] co ...

  9. OJ题归纳

    1.求最大公约数 利用辗转相除法求最大公约数 int gcd(int a,int b) { int c,r; if(a<b){c=a;a=b;b=c;} if(b==0) return a; r ...

  10. lintcode-125-背包问题 II

    125-背包问题 II 给出n个物品的体积A[i]和其价值V[i],将他们装入一个大小为m的背包,最多能装入的总价值有多大? 注意事项 A[i], V[i], n, m均为整数.你不能将物品进行切分. ...