关联关系介绍

下面就针对这个问题分为三个方面

1)一对多双向关联

2)多对一单向关联

3)一对多双向自身关联

1)一对多双向关联

需要注意的是通常情况下,一对多双向关联和多对一双向关联都是同一个意思。因为就从你那个角度来看待这个问题了,这个应该是么有问题滴。

实体配置

private Set<Score> scores=new HashSet<Score>();

public void set setScores(Score scores){

this.scores=scores;

}

public Set<Score> getScores(){

return scores;

}

private Student student;

public void setStudent(Student student){

this.student=student;

}

public Student getStudent(){

return student;

}

<set name="scores" cascade="sava-update">

<key column="StudentID />

<one-to-many class="com.jczb.domain" />

</set>

<many-to-one name="student" cascade="save-update" />

对应的注解为

  1. @ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST,CascaType.MERGE,CascaType.REFRESH})
  1. @JoinColumn(name="studentID")

简单介绍一下上面一些的配置的含义

i:set 表示在对应的scores属性为java.util.set类声明的变量

ii:cascade 表示在属性scores在更新或者保存的时候全部保存或更新持久态student对象

如上,常见的一对多双向关联所示,大家都知道hibernate是根据缓存中对象关联属性的变化同步更新数据库中的数据,在配置文件中,将
inverse属性设置为false时,那么在感受到scores属性变化时会执行两条SQL语句。当scores属性变化,来更新student的持久
化状态;当student属性发生变化,来更新scores变化,这时候scores是没有变化的,这时候不会再执行SQL。一共执行了两条SQL语句,
而当将scores属性的inverse属性设置为true时就可以来避免重复执行sql语句的情况。这时候是仅仅根据scores属性的变化来更改持久
化数据。

所以一般情况在one的一段,在本例中就是在student一端将inverse属性设置为true。推荐设置如下

<set name="scores" cascade="sava-update" inverse="true">

<key column="StudentID />

<one-to-many class="com.jczb.domain" />

</set>

对应注解

  1. @OneToMany(cascadeType={cascadeType.All},fetch=FetchType.LAZY)

2)多对一单向关联

其实在理解上面的一对多双向关联之后,再来理解这个多对一单向的关联关系简直是水到渠成。

还是拿这个例子来说明这个关联,多个scores对应一个student。这时候仅仅需要查询出来这个分数属于哪个学生即可,其他需求暂且不考虑。

<many-to-one name="student"

cascade="save-update"

class="com.jczb.domain.student"

not-null="true"

lazy="false"

 

/>

还是简单解释一下

i:属性为student
,当在内存中感受到student属性值发生变化时,会保存或者更新score对象对应的持久化数据。not-null:表示对应的关系型数据库不能为
空,lazy 属性在一般默认为proxy  默认为lazy=proxy,
在获取关联对象时,不进行查询,在获取关联对象的具体实现时,才执行sql查询    lazy=false时,不延时,马上加载

3)一对多双向自身关联

这种情况一般出现在树形的组织结构中,例如:organization这个实体,就可能出现父子结构这种关联关系。道理和第一个都是一样的,由此咱们直接看对应的xml文件即可。

<set name="organizations"

cascade="all-delete-orphan"

inverse="true">

<key column="ParentID" />

<one-to-many class="com.jczb.domain" />

</set>

i:将cascade属性设置为all-delete-orphan表示子对象和父对象的生命周期完全是一样的,完全是由父对象来控制的,所以这样才最贴近需求。

时间: 2024-08-01 14:39:08

关联关系介绍的相关文章

OLAP引擎——Kylin介绍

Kylin是ebay开发的一套OLAP系统,与Mondrian不同的是,它是一个MOLAP系统,主要用于支持大数据生态圈的数据分析业务,它主要是通过预计算的方式将用户设定的多维立方体缓存到HBase中(目前还仅支持hbase),这段时间对mondrian和kylin都进行了使用,发现这两个系统是时间和空间的一个权衡吧,mondrian是一个ROLAP系统,所有的查询可以通过实时的数据库查询完成,而不会有任何的预计算,大大节约了存储空间的要求(但是会有查询结果的缓存,目前是缓存在程序内存中,很容易

mybatis学习笔记三(关联关系)

学习mybatis的关联关系,主要注解在代码上,这里不做解释.配置文件一样的就不贴了 1.关联关系表创建(学生对应老师 多对一) 学生老师表 2.表对应的实体类 package com.home.entity; /** * 此类是:学生 * @author hpc * @2017年1月14日下午7:06:33 */ public class Student { private Integer student_id;//学生id private String student_name;//学生名字

结合Scikit-learn介绍几种常用的特征选择方法

作者:Edwin Jarvis 特征选择(排序)对于数据科学家.机器学习从业者来说非常重要.好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点.底层结构,这对进一步改善模型.算法都有着重要作用. 特征选择主要有两个功能: 减少特征数量.降维,使模型泛化能力更强,减少过拟合 增强对特征和特征值之间的理解 拿到数据集,一个特征选择方法,往往很难同时完成这两个目的.通常情况下,我们经常不管三七二十一,选择一种自己最熟悉或者最方便的特征选择方法(往往目的是降维,而忽略了对特征和数据理解的目的).

【原】使用Bmob作为iOS后台开发心得——查询关联关系(BmobRelation)

简介 Bmob中的数据关联分为Pointer和Relation两种(数据关联在我开发app过程中使用还是很频繁的,也算个难点.虽然之前没有学过数据库,但是觉得还是有必要熟悉和掌握它),对此,Bmob官方文档已经介绍得很详细了. 基本上查看文档就可以解决大部分数据关联的问题(Bmob的文档真心要赞一下).这里我记录下当时我最难理解的一个部分——查询关联关系. 还是使用官方文档的事例来学习(这一处官网有些地方的objectId书写错了,记录下时间2015-09-14). Post表(所有用户发表的文

HBase介绍 (1)---数据模型

http://blog.csdn.net/heyutao007/article/details/5766896 BigTable是什么?Google的Paper对其作了充分的说明.字面上看就是一张大表,其实和我们想象的传统数据库的表还是有些差别的.松散数据可以说是介于Map Entry(key & value)和DB Row之间的一种数据.在我使用Memcache的时候,有时候的需求是需要存储的不仅仅是简单的一个key对应一个value,可能我需要类似于数据库表结构中多属性的存储,但是又不会有传

LDAP协议介绍

LDAP协议基础概念 1. 从用途上阐述LDAP,它是一个存储静态相关信息的服务,适合"一次记录多次读取".经常使用LDAP服务存储的信息: 公司的物理设备信息(如打印机,它的IP地址.存放位置.厂商.购买时间等)  公开的员工信息(地址.电话.电子邮件-)  合同和账号信息(客户信息.产品交付日期.投标信息.项目信息-)  凭证信息(认证凭证.许可证凭证-) 2. 从数据结构上阐述LDAP,它是一个树型结构,能有效明白的描写叙述一个组织结构特性的相关信息.在这个树型结构上的每一

Hibernate关联关系的CRUD

本文以Group和User(一对多.多对一)双向关联为例,介绍关联关系的CRUD   下面先介绍两个属性 cascade:只影响CRUD中的CUD,即存储(save).更新(update).删除(delete) fetch:只影响CRUD中的R,即读取(get.load)   cascade(级联): 此属性仅仅帮助我们简化编程,不是必选项 如果A和B为单向关联,则在主导方设置cascade属性 如果A和B为双向关联,则在双方都要设置cascade属性 如果两个对象之间有关联关系,比如User和

IntelliJ IDEA 编译方式介绍

原文:https://github.com/judasn/IntelliJ-IDEA-Tutorial/blob/newMaster/make-introduce.md 编译方式介绍 相比较于 Eclipse 的实时自动编译,IntelliJ IDEA 的编译更加手动化,虽然 IntelliJ IDEA 也支持通过设置开启实时编译,但是不建议,因为太占资源了.IntelliJ IDEA 编译方式除了手工点击编译按钮进行编译之外,还有就是在容器运行之前配置上一个编译事件,先编译后运行.默认下 In

关联关系

下面就针对这个问题分为三个方面 1)一对多双向关联 2)多对一单向关联 3)一对多双向自身关联 1)一对多双向关联 需要注意的是通常情况下,一对多双向关联和多对一双向关联都是同一个意思.因为就从你那个角度来看待这个问题了,这个应该是么有问题滴. 实体配置 private Set<Score> scores=new HashSet<Score>(); public void set setScores(Score scores){ this.scores=scores; } publ