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

学习Spring-Data-Jpa(三)---关联关系常用注解的更多相关文章

  1. 学习Spring Data JPA

    简介 Spring Data 是spring的一个子项目,在官网上是这样解释的: Spring Data 是为数据访问提供一种熟悉且一致的基于Spring的编程模型,同时仍然保留底层数据存储的特​​殊 ...

  2. 学习-spring data jpa

    spring data jpa对照表 Keyword Sample JPQL snippet And findByLastnameAndFirstname - where x.lastname = ? ...

  3. Spring Data Jpa (三)定义查询方法

    本章详细讲解如何利用方法名定义查询方法(Defining Query Methods) (1)定义查询方法的配置方法 由于Spring JPA Repository的实现原理是采用动态代理的机制,所以 ...

  4. 初入spring boot(七 )Spring Data JPA

    Spring Data JPA通过提供基于JPA的Repository极大地减少JPA作为数据访问方案的代码量. 1.定义数据访问层 使用Spring Data JPA建立数据访问层十分简单,只需定义 ...

  5. 【Spring Data 系列学习】了解 Spring Data JPA 、 Jpa 和 Hibernate

    在开始学习 Spring Data JPA 之前,首先讨论下 Spring Data Jpa.JPA 和 Hibernate 之前的关系. JPA JPA 是 Java Persistence API ...

  6. 扩展spring data jpa的repository

    在我们编写代码的过程中,spring data jpa为我们的持久层提供的极大的方便,但有时spring data jpa提供的repository并不能完全满足我们开发的需求,因此就需要进行扩展.s ...

  7. Spring Data Jpa (五)@Entity实例里面常用注解详解

    详细介绍javax.persistence下面的Entity中常用的注解. 虽然Spring Data JPA已经帮我们对数据的操作封装得很好了,约定大于配置思想,帮我们默认了很多东西.JPA(Jav ...

  8. spring data jpa入门学习

    本文主要介绍下spring data jpa,主要聊聊为何要使用它进行开发以及它的基本使用.本文主要是入门介绍,并在最后会留下完整的demo供读者进行下载,从而了解并且开始使用spring data ...

  9. spring-boot (三) spring data jpa

    学习文章来自:http://www.ityouknow.com/spring-boot.html spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence ...

随机推荐

  1. Apache Kafka教程

    1.卡夫卡教程 今天,我们正在使用Apache Kafka Tutorial开始我们的新旅程.在这个Kafka教程中,我们将看到什么是Kafka,Apache Kafka历史以及Kafka的原因.此外 ...

  2. Oracle 11g 总结篇2

    第一部分: 字段名的别名用""括起来,如:last_name as "姓名". 去除重复:在投影的字段名前加上 distinct 就可以了. 比如:select ...

  3. Junit5中实现参数化测试

    从Junit5开始,对参数化测试支持进行了大幅度的改进和提升.下面我们就一起来详细看看Junit5参数化测试的方法. 部署和依赖 和Junit4相比,Junit5框架更多在向测试平台演进.其核心组成也 ...

  4. linq 动态排序 order by

    项目查询数据库使用的是linq 语法,可是后期需要用到不同字段的排序.各种纠结! 在网上找了各种资料 后面才找到两种方法 using System; using System.Collections. ...

  5. C# ——Parallel类

    一.Parallel类 Parallel类提供了数据和任务的并行性: 二.Paraller.For() Paraller.For()方法类似于C#的for循环语句,也是多次执行一个任务.使用Paral ...

  6. 【转载】C#中string类使用Replace方法来替换字符串

    在C#的字符串操作过程中,有时候需要替换字符串中的某个子字符串,此时就可以使用到字符串类自带的Replace方法来实现,Replace方法将查找到所有符合被替换的子字符串,然后将之全部替换为目标字符串 ...

  7. jQuery中的 AJAX

    jQuery库中支持AJAX的操作,功能十分完善 详细请参考官方文档:https://www.jquery123.com/category/ajax/ 首先需要引入jquery文件!!! $.ajax ...

  8. stm32 CAN过滤器组

    在互联型产品中, CAN1和CAN2分享28个过滤器组 其它STM32F103xx系列产品中有14个过滤器组 位宽设置 四种配置方式: 1个32位的屏蔽位模式 2个32位的标识符列表模式,可以过滤2个 ...

  9. MySQL Lock--gap before rec insert intention waiting

    在事务插入数据过程中,为防止其他事务向索引上该位置插入数据,会在插入之前先申请插入意向范围锁,而如果申请插入意向范围锁被阻塞,则事务处于gap before rec insert intention ...

  10. Kubernetes 1.15部署日记-使用kubeadm--<7-8>

    7. 在k8s集群中run一个应用 nginx已经跑起来了到此kubernetes集群部署结束了. 8. 总结 此次部署kubernetes的起因是AI团队中的kubernetes项目跑在其他IP段网 ...