美文网首页
Hibernate(three)

Hibernate(three)

作者: javaMonkey | 来源:发表于2017-01-04 19:48 被阅读0次

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

    相关文章

      网友评论

          本文标题:Hibernate(three)

          本文链接:https://www.haomeiwen.com/subject/cwelvttx.html