zoukankan      html  css  js  c++  java
  • hibernate中注解方式中的控制反转

    都知道hibernate用xml方式配置关系时(one-to-many,many-to-many)可以添加控制反转属性 inverse=false(默认)  

    即将两表之间的关系交给对方来维护.

    inverse=true表示本方不维护关系,有对方维护关系

    但是需注意的是,one-to-one关系是没有控制反转的,只能交由外键来维护关系.

    从而导致在设置关系时,只能有外键方设置,移除关系时,只能从外键方来解除关系,删除记录时,只能先删外键方,在删主键方(save,remove,delete)

    如果有控制反转的话,就方便的多,两表之间可以互相设置关系,互相解除关系,删除时,删除主键方时,会将外键方的外键置为空值()不过这样不推荐)

    那么在hiebernate注解方式下(在没有xml配置的情况下)是如何设置控制反转的,如何在onetoMany ,manytomany中相互设置关联了?

    当然inverse对get/query没有任何影响

    一般控制反转(维护关系)都交给多方(外建方)来维护,学生记教室容易,教室记学生麻烦

    原则:

    1.one-to-one不添加控制反转,由外键维护关系

    2.由多方维护关系,

    主表方不维护主键关系

    <set name="employees" inverse="true">
    <key column="departmentId"></key>
    <one-to-many class="Employee"/>
    </set>

    子表方(外键方) many to one不设置inverse属性(默认为inverse=false)  你写了反倒会出错  同理在annotation中many to one也不能写mappedBy (默认都是由对方控制的)

    在one-to-one 双向关联中 外键方维护关系

    @JoinColumn(name=" ",unique=".")  //设置外键 inverse=false

    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="pid",unique=true)
    public IdCard getIdCard() {
    return idCard;
    }
    

    主键方mappedBy="子表外键对象" //inverse=true

    many-to-many  有一方维护外键关系就行了

    因此设置了一方关系 另一方@ManyToMany()不设置mappedBy就可以互相维护关系(但是不推荐)

    mappedBy ===inverse=true

    many-to-one 不写

  • 相关阅读:
    快速掌握一个语言最常用的50%[转]
    技术路线的选择重要但不具有决定性 [转]
    图形、图像国外期刊 [转]
    SessionHelper.cs(20170223)
    PageHelper.cs(20170223)
    FileDown.cs(20170223)
    EncryptionHelper.cs(20170223)
    CookieHelper.cs(20170223)
    ConvertJson.cs(20170223)
    ConvertHex.cs(20170223)
  • 原文地址:https://www.cnblogs.com/lt123/p/7271416.html
Copyright © 2011-2022 走看看