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

一个Parent有多个Child,一个Child只能有一个Parent。

package com.xian;

public class Child {
 private Long id;
 private String name;
 private Parent parent;

public Long getId() {
  return id;
 }

public void setId(Long id) {
  this.id = id;
 }

public String getName() {
  return name;
 }

public void setName(String name) {
  this.name = name;
 }

public Parent getParent() {
  return parent;
 }

public void setParent(Parent parent) {
  this.parent = parent;
 }

}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
 <class name="com.xian.Child" table="child">
  <id name="id" column="childId">
   <generator class="native" />
  </id>
  <property name="name" type="string"></property>
  <many-to-one name="parent" column="parentId" not-null="true">
  </many-to-one>
 </class>
</hibernate-mapping>

package com.xian;

import java.util.HashSet;
import java.util.Set;

public class Parent {
 private Long id;
 private String name;
 private Set children = new HashSet();

public Long getId() {
  return id;
 }

private void setId(Long id) {
  this.id = id;
 }

public String getName() {
  return name;
 }

public void setName(String name) {
  this.name = name;
 }

public Set getChildren() {
  return children;
 }

public void setChildren(Set children) {
  this.children = children;
 }
 
}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
 <class name="com.xian.Parent" table="parent">
  <id name="id" column="parentId">
   <generator class="native"></generator>
  </id>
  <property name="name" type="string"></property>
  <set name="children" inverse="true">
  <!-- 此处inverse设置为true,则关联的控制方交给了child,一对多关联一般都将控制方交给多端 -->
   <key column="parentId" not-null="true"></key>
   <one-to-many class="com.xian.Child"/>
  </set>
 </class>
</hibernate-mapping>

Parent p = new Parent();
p.setName("parent");
Child c = (Child) session.load(Child.class, 4l);  //原child表中已存在id=4的child
p.getChildren().add(p);  // 我希望用parent端来修改关联,即将id=4的child的外键变为现在这个parent的主键值
session.save(p); //这里保存parent,同时希望关联也得到修改

但是我们发现parent确实保存了,而child的外键还是原值,没有关联到我们现在的外键
原因就是我们将关联的控制方交给了child端,这样一来parent就不能够控制关联了。

Parent p = new Parent();
p.setName("parent");
Child c = (Child) session.load(Child.class, 4l);
c.setParent(p);   //这样由child端修改关联就ok了 
session.save(p);

hibernate inverse属性的作用的更多相关文章

  1. hibernate inverse属性

    修改街道对应的区道信息: 修改后会发现程序执行了两次修改操作: 原因: 区道与街道是一对多的关系: 由于Hibernate是双向维护外键,所以当修改区道中的街道时,会修改一次外键:在修改街道中的区道时 ...

  2. Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

    1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; privat ...

  3. hibernate中cascade属性以及inverse属性

    级联操作 cascadecascade的常用属性值 none 默认值 不做任何变动 save-update 保存或修改 delete 删除 all 包含save-update 和delete等行为 c ...

  4. hibernate笔记--cascade级联以及inverse属性

    cascade : 不管是单向多对一还是一对多,或者是双向的一对多关系,在一的一端映射文件中有一个set标签,在多的一端有many-to-one标签,拿前几篇笔记里讲的Grade和Student举例, ...

  5. Hibernate中inverse属性与cascade属性

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

  6. 【SSH三个框架】Hibernate第十篇基础:inverse属性具体解释

    inverse后经常用于双向1-N在相关性.它也可以在使用N-N该协会,这里,例如用双1-N联想 或两个与各部门及工作人员,两javabean没有写. 首先,我们的员工看映射文件: <?xml ...

  7. Hibernate之cascade属性和inverse属性

    1.cascade属性 cascade属性的作用是描述关联对象进行操作时的级联特性,只有涉及关系的元素才有cascade属性.具有cascade属性的标记包括<many-to-one/>. ...

  8. Hibernate课程 初探一对多映射4-1 inverse属性

    1 <Set>节点的inverse属性默认由one方来维护(默认值为false).将inverse属性修改为true则由多方来维护.

  9. 06章 映射一对多双向关联关系、以及cascade、inverse属性

    当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象.或者通过集合导航到一组对象.例如: 对于给定的Emp对象,如果想获得与它关联的Dept对象,只要调用如下方法 Dept dept=emp ...

随机推荐

  1. ListView灵活的用法

    以下是示例的效果图: WinForm的ListView控件是可以分组显示的,还可排序. 可以把ListView的View属性设置为Details 完整项目请到下面网址查找下载 http://hover ...

  2. node.js 的事件驱动

    events 模块只提供了一个对象: events.EventEmitter. EventEmitter 的核心就是事件发射与事件监听器功能的封装.EventEmitter 的每个事件由一个事件名和若 ...

  3. Myeclipse 的hadoop环境搭建

    https://issues.apache.org/jira/secure/attachment/12460491/hadoop-eclipse-plugin-0.20.3-SNAPSHOT.jar ...

  4. 【转】ZigBee是如何组网的?

    组网方案设计:组建一个完整的zigbee网状网络包括两个步骤:网络初始化.节点(路由器或终端)加入网络,其中节点加入网络又包括两个步骤:通过与协调器连接入网和通过已有父节点入网. 一.网络初始化:  ...

  5. JAVA Collections工具类sort()排序方法

    主要分析内容: 一.Collections工具类两种sort()方法 二.示例 一.Collections工具类两种sort()方法 格式一: public static <T extends ...

  6. PHP工作笔记:数组转字符串与字符串转数组

    一个数组要入库,发现不可以,特定用函数转为字符串入库 $data = array( 'http://img4.bitautoimg.com/autoalbum/files/20110420/734/2 ...

  7. Linux(三)__文件权限、系统的查找、文本编辑器

    一.文件权限 1.理解文件权限及其分配 2.掌握查看文件和目录的权限 3.掌握权限文字表示法和数值表示法 4.学会使用chmod命令设置权限 5.学会使用chown命令修改属主和组 linux文件能不 ...

  8. cocos2d-x3.3 以前版本 工程Xcode6编译时的问题

    Undefined symbols for architecture i386: "_fwrite$UNIX2003", referenced from: _unixErrorHa ...

  9. JS操作未跨域iframe里的DOM

    这里简单说明两个方法,都是未跨域情况下在index.html内操作b.html内的 DOM. 如:index.html内引入iframe,在index内如何用JS操作iframe内的DOM元素? 先贴 ...

  10. 关于XAMPP默认端口80 和443被占用的问题

    关于安装xampp-win32-1.8.1-VC9-installer.zip后启动时候报端口80和443被占用的问题解决 xampp-win32-1.8.1-VC9-installer.zip下载地 ...