• hibernate关联映射注解及@JoinColumn的用法


    1、一对一单项外键(比如实体People和实体IDCard,一个人对应一个身份证号,反之)
    @OneToOne(cascade=CAscadeType.ALL)全级联关系
    @JoinColumn(name="pid",unique=true)被控类的外键写到主控类中,且唯一
    ps:保存时应该先保存外键对象,再保存主表对象,这是因为数据库相关约束的原因

    2、一对一双向外键
    主控方配置不变
    被控方添加
    @OneToOne(mappedBy="card")myppedBy指定了把控制权利交给主控方,指定主控方所对应的外键属性card
    ps:双向关联,必须设置mappedBy属性,因为双向关联只能交给一方去控制,不可能双方都设置外键保存关联关系,否则双方都无法保存

    3、多对一单向外键(如多个学生对应一个班级)
    在多方添加注解
    @ManyToOne(cascade{CAscadeType.ALL},fetch=FetchType.EAGER)
    EAGER表示迫切的加载
    @JoinColumn(name="cid",referencedColumnName="CID")JoinColumn在此处表示多方持有一方的引用,一方的外键用name表示,referencedColumnName表示如果这个外键映射到数据库中作为属性给它起的别名

    4、一对多单向外键(如一个班级有多个学生)
    在一的一方添加注解,一方持有多方的一个集合
    @OneToMany(cascade{CAscadeType.ALL},fetch=FetchType.LAZY)
    @JoinColumn(name="cid")cid仍然存在于学生表中作为外键
    ps:FetchType的抓取数据策略,如果是多对一,多的一方通常设置为EAGER,一对多,一的一方通常设置为LAZY

    5、一对多(多对一)双向外键
    在多方添加注解
    @ManyToOne(cascade{CAscadeType.ALL},fetch=FetchType.EAGER)
    @JoinColumn(name="cid")
    在一的一方添加注解
    @OneToMany(cascade{CAscadeType.ALL},fetch=FetchType.LAZY)
    @JoinColumn(name="cid")
    ps:这里的@JoinColumn可能不太好理解,但你仔细想想(假设对象为学生和班级),每个学生都可以有一个cid属性作为他的外键,表示他属于哪个班级,但不可能班级表里面有sid,因为一个班级可能有多个学生,这就导致sid不能只有一个,这将破坏外键的唯一性

    6、多对多单向外键
    其中一个多方持有另一个多方的集合对象(如学生持有老师的集合)
    学生和老师之间的外键关系的维护需要通过中间表来完成
    注解
    @ManyToMany
    @JoinTable(name="teachers_students",JoinColumns={@JoinColumn(name="sid")},inverseJoinColumns={@JoinColumn(name="tid")})
    Jointable注解可以生成中间表,JoinColumns和inverseJoinColumns指定了相应的控制字段

    7、多对多双向外键
    双方都持有对方的集合,其中一方设置
    如教师类
    @ManyToMany(mappedBy="teachers")将主控方交给学生
    学生类
    @ManyToMany
    @JoinTable(name="teachers_students",JoinColumns={@JoinColumn(name="sid")},inverseJoinColumns={@JoinColumn(name="tid")})
    ————————————————
    版权声明:本文为CSDN博主「JokerZhan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/JokerZhan/java/article/details/85014806

  • 相关阅读:
    ubuntu 如何 su 到 root(作为 root 用户操作)
    centos6.5 redis 安装配置及java调用
    springmvc 国际化
    springmvc 整合数据验证框架 jsr
    springmvc 整合shiro
    centos 6.5 安装mysql
    hive 报错 java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
    centos 关闭防火墙
    client.HConnectionManager$HConnectionImplementation: Can't get connection to ZooKeeper: KeeperErrorCode = ConnectionLoss for /hbase
    fms +fme 视频直播
  • 原文地址:https://www.cnblogs.com/Jeely/p/12613975.html
Copyright © 2020-2023  润新知