Hibernate(three)

2017-01-04  本文已影响0人  javaMonkey

//////////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次

上一篇下一篇

猜你喜欢

热点阅读