zoukankan      html  css  js  c++  java
  • 关系类型总结和对应的注解

    1. Hibernate Annotation关系映射有下面几种类型:
    1)一对一外键关联映射(单向)
    
    2)一对一外键关联映射(双向)
    
    3)一对一主键关联映射(不重要)在这不演示
    
    在实际中很少用,使用注解@PrimaryKeyJoinColumn
    
    意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用
    
    注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML
    
    映射可以生成。Annotation注解一对一主键关联映,有些bug。不过没空去研究它。
    
    因为在实际开发中一对一很少用。在实际开发中我机会没有用过,主键关联就更少了
    
    4)多对一关联映射
    
    5)一对多关联映射(单向)
    
    6)一对多关联映射(双向)
    
    7)多对多关联映射(单向)
    
    8)多对多关联映射(双向)
    
     
    
    2.介绍各种映射用法
    
    1)一对一外键关联映射(单向)
    
    @OneToOne(cascade=CascadeType.ALL)
    
    @JoinColumn(name="userid",unique=true)
    
    //一对一外键关联,使用@OneToOne,并设置了级联操作
    
    //@JoinColum设置了外键的名称为userid(数据库字段名),如果不设置,则默认为另一类的属性名+ _id
    
     //外键的值是唯一的(unique),不可重复,与另一类的主键一直
    
     
    
    2)一对一外键关联映射(双向)
    
     Class1里与上面一样,  
    
       Class2:
    
    @OneToOne(mappedBy="class2",cascade=CascadeType.ALL)
    
    //一对一双向关联关系,使用@OneToOne
    
    //注意:需要加上mappedBy="class2",如果不加上的话,
    
    //Class2也会生成一个外键(class1_id)
    
    //mappedby="class2"需要指向与他关联对象的一个属性
    
    //说明双向关联关系中,有且仅有一端是作为主体(owner)端存在的
    
    //主体端负责维护联接列
    
    //对于不需要维护这种关系的从表则通过mappedBy属性进行声明
    
    //mappedBy的值指向主体的关联属性
    
    //规律:只有是双向关联关系,都加上mappedby
    
        //cascade=CascadeType.ALL级联
    
     
    
    4)多对一关联映射
    
    在多的一端配置:
    
    @ManyToOne(targetEntity=Organization.class)
    
    @JoinColumn(name="orgid")
    
    //多对一注解@ManyToOne
    
    //targetEntity指定了关联对象
    
    //@JoinColumn(name="orgid")指定生产的外键的字段名,默认是org_id
    
     
    
    5)一对多关联映射(单向)
    
    
    @OneToMany
    
    @JoinColumn(name="orgid")
    
    /**
    
     * 一对多注解@OneToMany(单向)
    
     * 如果只写@OneToMany的话,hibernate会建一张中间表来
    
     * 维护他们之间的关系,
    
     * 加上@JoinColumn(name="orgid"),则不会建中间表,他会在
    
     * 多的一端加上外键orgid,来维护他们之间的关系
    
     */
    
    6)一对多关联映射(双向)
    
    一端:
    
    
    @OneToMany(mappedBy="org")
    
    @JoinColumn(name="orgid")
    
    /**
    
     * 一对多双向,在一的一端中设置mappedBy
    
     * 说明多的一端为主导
    
     * 如果指定了外键字段名称,则多的一端也需要指定相同的字段名称
    
     */
    
     
    
    多端:
    
    @ManyToOne
    
    @JoinColumn(name="orgid")
    
    /**
    
     * 一对多双向
    
     * 需要指定外键与一的一端给的外键名称一致,@JoinColumn(name="orgid")
    
     * 也可以不指定,如果在多的一端不指定,则一的一端也不能指定
    
     * 否则为生成两个外键
    
     */
    
     
    
    7)多对多关联映射(单向)
    
    
     
    
    @ManyToMany
    
    /**
    
     * 多对多映射:注解@ManyToMany(单向)
    
     * 默认情况下,hibernate会自动的创建一张中间表,
    
     * 来维护多对多关系
    
     * 默认中间表的名称 :user_role中间表,字段的名称user_id role_id
    
     * 如果想更换表名和字段名称,注解如下:
    
     */
    
    @JoinTable(name="t_u_r",
    
    joinColumns={@JoinColumn(name="u_id")},
    
    inverseJoinColumns={@JoinColumn(name="r_id")}
    
    )
    
     
    
    8)多对多关联映射(双向)  User端
    
    
    @ManyToMany
    
    /**
    
     * 多对多映射:注解@ManyToMany(单向)
    
     * 默认情况下,hibernate会自动的创建一张中间表,
    
     * 来维护多对多关系
    
     * 默认中间表的名称 :user_role中间表,字段的名称user_id role_id
    
     * 如果想更换表名和字段名称,注解如下:
    
     */
    
    @JoinTable(name="t_u_r",
    
    joinColumns={@JoinColumn(name="u_id")},
    
    inverseJoinColumns={@JoinColumn(name="r_id")}
    
    )
    
    /**
    
     * @JoinTable(name="t_u_r",
    
     * 指定中间表的表名
    
     * joinColumns={@JoinColumn(name="u_id")},
    
     * 指定当前对象的外键
    
     * inverseJoinColumns={@JoinColumn(name="r_id")}
    
     * 指定关联对象的外键
    
     */
    
     
    
    Role端
    
    @ManyToMany(mappedBy="role")
    
    /**
    
     * 多对多,双向关联映射
    
     */
  • 相关阅读:
    NOIP2017 时间复杂度 大模拟
    【Python】CV2的一些基本操作
    【Python】类、对象、self
    【Ubuntu18.04】清空回收站
    小飞机可以解决git clone没有返回的问题吗?
    sqlserver2005 远程服务器数据 完全拷贝 到本地数据库
    Microsoft Visual Studio 2005 多线程时 解决不是该线程创建的来访问
    MS SqL2000 数据库置疑状态的解决方法[转]
    vue 函数配置项watch以及函数 $watch 源码分享
    Vue生命周期之beforeCreate vue 生命周期详解
  • 原文地址:https://www.cnblogs.com/MarchThree/p/8039180.html
Copyright © 2011-2022 走看看