• 学习Spring-Data-Jpa(三)---关联关系常用注解


    1、@JoinColumn: 用于指定 连接实体关联或元素集合的列。
    属性 name:
    外键列的名称,它所在的表取决于上下文。
    如果连接是使用外键映射策略的一对一或多对一映射,则外键列位于源实体或可嵌入的表中。
    如果连接用于使用外键映射策略的单向一对多映射,则外键位于目标实体的表中。
    如果联接是针对多对多映射,或者是针对使用联接表的一对一或双向多对一/多对多映射,则外键在联接表中。

    如果联接是元素集合的联接,则外键在集合表中。

    默认值(仅在使用单个连接列时适用): 引用实体属性或字段名称 + "_" + 引用的主键名称。

    属性 referencedColumnName:
    这个外键列引用的列的名称。
    当与这里描述的情况之外的实体关系映射一起使用时,所引用的列位于目标实体的表中。
    当与单向OneToMany外键映射一起使用时,所引用的列位于源实体的表中。
    当在一个@JoinTable中使用时,被引用的键列位于所属实体的实体表中,或者如果连接是逆连接定义的一部分,则在逆实体中使用。

    在CollectionTable映射中使用时,引用的列位于包含集合的实体的表中。

    默认值(仅在使用单个联接列时适用):与引用表的主键列相同的名称。

    属性 unique : 是否唯一,默认false。
    属性 nullable:能否为null,默认true。
    属性 insertable:是否跟随一起新增,默认true。
    属性 updatable:是否跟随一起修改,默认true。
    属性 columnDefinition:DDL sql片段。
    属性 table :
    包含该列的表的名称。如果没有指定表,则假定列在适用实体的主表中。
    默认值:
    如果联接是使用外键映射策略的一对一或多对一映射,则为源实体或可嵌入表的名称。
    如果联接用于使用外键映射策略的单向OneToMany映射,则为目标实体的表名。
    如果联接是针对多对多映射,或者是针对使用联接表的一对一或双向多对一/多对多映射,则联接表的名称。
    如果联接是元素集合,则为集合表的名称。

    属性 foreignKey:于在表生成时指定或控制外键约束的生成。如果未指定此元素,则将应用持久性提供程序的默认外键策略。一般默认即可。



    2、@JoinColumns 指定组合外键的映射。该注释对相同关系的JoinColumn注释进行分组。
    使用JoinColumns注释时,必须在每个这样的JoinColumn注释中指定name和referencedColumnName元素。


    3、@JoinTable 指定关联的映射。用于关联的拥有方。
    通常用于many-to-many和单向one-to-many关联的映射。
    还可以用于双向many-to-one/one-to-many,单向many-to-one,双向或单向one-to-one。
    如果没有@JoinTable注解,则使用注解元素默认值,连接表的名称为使用下划线连接在一起的关联主表的表名(首先是拥有方)。
    属性 name:连接表名称,默认为两个关联的主实体表的连接名称,用下划线分隔。
    属性 catalog:表的目录。默认为默认目录。一般默认即可。
    属性 schema:表的schema。默认为用户的默认schema。一般默认即可。
    属性 joinColumns:连接表的外键列,它引用拥有关联的实体的主表。
    属性 inverseJoinColumns:连接表的外键列,它引用不拥有关联的实体的主表。(即相反的一面)。
    属性 foreignKey:用于在表生成时为joinColumns元素对应的列指定或控制外键约束的生成。一般默认即可。
    属性 inverseForeignKey:于指定或控制在表生成时对应于inverseJoinColumns元素的列的外键约束的生成。一般默认即可。
    属性 uniqueConstraints:要放在表上的唯一约束。只有在表生成时才使用这些方法。默认没有附加约束。一般默认即可。
    属性 indexes:表的索引。只有在表生成时才使用这些方法。一般默认即可。


    4、@OneToOne 指定与具有一对一多重性的另一个实体的单值关联。
    通常不需要显式地指定关联的目标实体,因为通常可以从引用的对象类型推断出它。
    如果关系是双向的,非拥有方必须使用OneToOne注释的mappedBy元素来指定拥有方的关系字段或属性。

    属性 targetEntity :关联的目标实体类。默认字段或属性的类型。
    属性 cascade:级联操作策略。默认情况下没有级联操作。
    属性 fetch:数据获取方式,默认EAGER,立即获取。
    属性 optional:是否允许为空,默认true。
    属性 mappedBy:拥有关系的字段。此元素仅在关联的反(非拥有)端指定。关联关系被谁维护。
    mappedBy不能与@JoinColumn、@JoinTable同时使用。
    mappedBy指的是另一方实体属性的名称
    属性 orphanRemoval:是否级联删除,和CascadeType.REMOVE效果一样,只要配置其中一种就会级联删除。默认false。

    @OneToOne 配合@JoinColumn 一起使用,可以单项关联也可以双向关联,是具体情况而定。双向一对一决定哪一方来管理外键,通常使用常用的一方来管理。


    5、@OneToMany 指定一个具有一对多多重性的多值关联。
    如果使用泛型定义集合以指定元素类型,则不需要指定关联的目标实体类型;否则,必须指定目标实体类。
    如果关系是双向的,则必须使用mappedBy元素指定关系的所有者实体的关系字段或属性。
    属性 targetEntity:关联的目标实体类。只有使用java泛型定义集合时,才是可选的。否则必须指定。使用泛型定义时,默认为集合的参数化类型。
    属性 cascade:级联操作策略。默认情况下没有级联操作。
    属性 fetch:数据获取方式,默认LAZY,延迟加载。(与一对一、多对一不同)
    属性 mappedBy:拥有关系的字段。除非关系是单向的,否则是必需的。
    属性 orphanRemoval:是否级联删除,和CascadeType.REMOVE效果一样,只要配置其中一种就会级联删除。默认false。
    指定集合中的一个元素中集合中移除,是否从数据库中删除。

    注意:@OneToMany单独使用建立单项一对多关系时,如果不配合@JoinColumn使用,会额外产生一张表来维护关联关系。配合@JoinColumn使用时,外键会生成在目标表中。


    6、@ManyToOne 指定与另一个具有多对一多重性的实体类的单值关联。
    通常不需要显式地指定目标实体,因为它通常可以从引用的对象类型推断出来。
    如果关系是双向的,非所有者 OneToMany实体端必须使用mappedBy元素来指定关系的所有者实体的关系字段或属性。
    属性 targetEntity:关联的目标实体类。默认字段或属性的类型。
    属性 cascade:级联操作策略。默认情况下没有级联操作。
    属性 fetch:数据获取方式,默认EAGER,立即获取。(与一对多不同)
    属性 optional:是否允许为空,默认true。


    7、@OrderBy 指定关联查询时的排序,一般和@OneToMany一起使用。
    要排序的字段格式如下
    orderby_list::= orderby_item [,orderby_item]*
    orderby_item::= [property_or_field_name] [ASC | DESC]

    如果没有指定升序还是降序,默认使用升序。
    如果没有指定实体排序的元素,默认使用主键。
    排序字段必须的对应的关联实体中的属性对应,必须支持比较运算。
    可以用.来引用嵌入属性中的字段。


    8、@ManyToMany 指定具有多对多多重性的多值关联。
    每个多对多关联都有两个方面,拥有方和非拥有方,或反向方。联接表是在所属方指定的。
    如果关联是双向的,任何一方都可以被指定为拥有方。非拥有方必须使用ManyToMany注释的mappedBy元素来指定拥有方的关系字段或属性。
    属性 targetEntity:关联的目标实体类。只有使用java泛型定义集合时,才是可选的。否则必须指定。使用泛型定义时,默认为集合的参数化类型。
    属性 cascade:级联操作策略。默认情况下没有级联操作。
    属性 fetch:数据获取方式,默认LAZY,延迟加载。
    属性 mappedBy:拥有关系的字段。除非关系是单向的,否则是必需的。

    @ManyToMany一般和@JoinTable一起使用。
    @ManyToMany 也可拆分成两个多对一关系。

    源码地址:https://github.com/caofanqi/study-spring-data-jpa
  • 相关阅读:
    两小时后执行打开浏览器的操作
    Markdown语法
    Python机器学习2.2
    身份证姓名与身份证号校验
    根据银行卡号获取开户行
    生成微信小程序二维码
    .net 生成二维码
    微信支付API V3(.Net Core)
    .net 生成项目xml描述文件
    汉字排序问题
  • 原文地址:https://www.cnblogs.com/caofanqi/p/11802793.html
Copyright © 2020-2023  润新知