Hibernate(three)

//////////2016-12-16 ~ 2016-12-17///////////

int study_data(){

Hibernate关系映射

一对一关系:

应用场景:    数据脱敏

                       共享主键

关系定义(主控方):

xml: 

<one-to-one name="propertyName" class="className" cascade="all" />

annotation:

@OneToOne

@PrimaryKeyJoinColumn

关系定义(被控方):

xml:

<one-to-one name="propertyName" class="className" />

annotation:

@OneToOne(mappedBy="propertyName")

一对多关系:

应用场景:    

    定义外键连接

关系定义(一方):

xml:

<set name="propertyName" cascade="all" inverse="true">

    <key column="foreign_key_col"/>

    <one-to-many class="className"/>

</set>

annotation:

@OneToMany

@JoinColumn(name="foreignKeyName")

关系定义(多方):

xml:

<many-to-one name="propertyName" column="columnName" class="className"/>

annotation:

@ManyToOne()

@JoinColumn(name="foreignKeyName")

多对多关系:

应用场景:

不建议使用,建议拆解成2个一对多的连接

关系定义(主控方):

xml:

<set name="propertyName" table="middle_table_name">

    <key column="columnName_master" />

    <many-to-many class="className" column="columnName_slave" />

</set>

annotation:

@ManyToMany 

@JoinTable(name="middle_table_name"),

joinColumns=@JoinColumn(name="columnName_master"),

inverseJoinColumns=@JoinColumn(name="columnName_slave")

关系定义(被控方):

xml:

<set name="propertyName" table="middle_table_name">

    <key column="columnName_slave" />

    <many-to-many class="className" column="columnName_master" />

</set>

annotation:

@ManyToMany(mappedBy="propertyName")

延迟加载(lazy load)

为了减少由于大量关联信息引起的查询性能负担

对于集合属性,通常采用延迟加载策略

lazy="true/false"

FetchType.EAGER(迫切加载)/FetchType.LAZY(延迟加载)

级联设置(cascade)

all - 所有操作都执行级联操作

none - 所有操作都不执行级联操作

save-update - 仅保存和更新时执行级联操作

delete - 仅删除时执行级联操作

控制设置(inverse)

是否将维护关系的权利交给对方

默认值为false,可选为true

一对多关系中,通常讲"一"的一方设为true,即由"多"的一方来维护关系

Java Annotation中由mappedBy属性替代

抓取策略(fetch)

抓取策略:当应用需要通过关联关系获得引用对象时,如何获得对象信息的策略

join - 通过连接的方式获得引用对象信息,默认延迟加载为false

select - 通过产生select查询的方式获得引用对象信息,默认延迟加载为true

subselect(只允许查找多方"-tomany") - 通过子查询获得关联对象的信息,默认延迟加载为true

batch(Annotation中已取消使用) - 通过给定的值,批量查找关联对象的信息,默认延迟加载为true。

例如:batch-size="5",则对于10个关联对象,会查询2次

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,734评论 0 4
  • (一)Struts、Spring、Hibernate、Mybatis框技术 1.Struts2.0有几种标签库 【...
    独云阅读 3,300评论 0 62
  • 一. Java基础部分.................................................
    wy_sure阅读 3,854评论 0 11
  • 第四章承接前三章讲述了序言的写作方法。也让我认识到序言的重要性。文中 背景-冲突-疑问 的方式同样可以运用在论文的...
    咚咚咚天阅读 301评论 0 0