zoukankan      html  css  js  c++  java
  • hibernate的注解属性mappedBy详解

    【http://shenyuc629.iteye.com/blog/1681225】

    mappedBy: 
    1>只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性; 
    2>mappedBy标签一定是定义在被拥有方的,他指向拥有方; 
    3>mappedBy的含义,应该理解为,拥有方能够自动维护跟被拥有方的关系,当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的; 
    4>mappedBy跟joinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。mappedBy这方定义JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表。 

    下面是一个例子: 
       人跟身份证双向关联 
       在Person里面定义的注解: 

    在person里面定义的注释代码  收藏代码
    1. @OneToOne(cascade = CascadeTye.ALL,optional = true)  
    2. public IDCard getIdCard(){  
    3.    return idCard;  
    4. }  



    在idcard里面定义的注释代码  收藏代码
    1. @OneToOne(cascade = CascadeType.ALL,mappedBy = "idCard",optional = false)  
    2. public Person getPerson(){  
    3.    return person;  
    4. }  



    多了一个mappedBy这个方法,他表示什么呢?它表示当前所在表和Person的关系是定义在Person里面的idCard这个成员上面的,他表示此表是一对一关系中的从表,也就是关系是在person表中维护的,这是最重要的。Person表是关系的维护者,有主导权,它有个外键指向IDCard。 
    我们也可以让主导权在IDCard上面,也就是让他产生一个指向Person的外键,这也是可以的,但是最好让Person来维护整个关系,这样更符合我们的思维。 
    我们也可以看到在Person里面的IDCard是注释optional=true,也就是说一个人是可以没有身份证的,但是一个身份证是不可以没有人的,所以在IDCard里面注释Person的时候,optional=false了,这样就可以防止一个空的身份证记录进数据库。

  • 相关阅读:
    flex space-between最后一行对齐问题的解决方案
    如何在父级下访问v-slot的值——vuejs
    flex下省略号的问题解决
    Typescript使用字符串联合类型代替枚举类型
    flex三个对齐属性的记忆方式
    JS中的slice()和splice()的区别以及记忆方式
    JS中的call,apply和bind及记忆方式
    Vue 还是 React 还是 Angular ?
    利用ES6的Promise.all实现至少请求多长时间
    .net core <environment> 不起作用
  • 原文地址:https://www.cnblogs.com/dixinyunpan/p/5796785.html
Copyright © 2011-2022 走看看