学习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
学习Spring-Data-Jpa(三)---关联关系常用注解的更多相关文章
- 学习Spring Data JPA
简介 Spring Data 是spring的一个子项目,在官网上是这样解释的: Spring Data 是为数据访问提供一种熟悉且一致的基于Spring的编程模型,同时仍然保留底层数据存储的特殊 ...
- 学习-spring data jpa
spring data jpa对照表 Keyword Sample JPQL snippet And findByLastnameAndFirstname - where x.lastname = ? ...
- Spring Data Jpa (三)定义查询方法
本章详细讲解如何利用方法名定义查询方法(Defining Query Methods) (1)定义查询方法的配置方法 由于Spring JPA Repository的实现原理是采用动态代理的机制,所以 ...
- 初入spring boot(七 )Spring Data JPA
Spring Data JPA通过提供基于JPA的Repository极大地减少JPA作为数据访问方案的代码量. 1.定义数据访问层 使用Spring Data JPA建立数据访问层十分简单,只需定义 ...
- 【Spring Data 系列学习】了解 Spring Data JPA 、 Jpa 和 Hibernate
在开始学习 Spring Data JPA 之前,首先讨论下 Spring Data Jpa.JPA 和 Hibernate 之前的关系. JPA JPA 是 Java Persistence API ...
- 扩展spring data jpa的repository
在我们编写代码的过程中,spring data jpa为我们的持久层提供的极大的方便,但有时spring data jpa提供的repository并不能完全满足我们开发的需求,因此就需要进行扩展.s ...
- Spring Data Jpa (五)@Entity实例里面常用注解详解
详细介绍javax.persistence下面的Entity中常用的注解. 虽然Spring Data JPA已经帮我们对数据的操作封装得很好了,约定大于配置思想,帮我们默认了很多东西.JPA(Jav ...
- spring data jpa入门学习
本文主要介绍下spring data jpa,主要聊聊为何要使用它进行开发以及它的基本使用.本文主要是入门介绍,并在最后会留下完整的demo供读者进行下载,从而了解并且开始使用spring data ...
- spring-boot (三) spring data jpa
学习文章来自:http://www.ityouknow.com/spring-boot.html spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence ...
随机推荐
- Apache Kafka教程
1.卡夫卡教程 今天,我们正在使用Apache Kafka Tutorial开始我们的新旅程.在这个Kafka教程中,我们将看到什么是Kafka,Apache Kafka历史以及Kafka的原因.此外 ...
- Oracle 11g 总结篇2
第一部分: 字段名的别名用""括起来,如:last_name as "姓名". 去除重复:在投影的字段名前加上 distinct 就可以了. 比如:select ...
- Junit5中实现参数化测试
从Junit5开始,对参数化测试支持进行了大幅度的改进和提升.下面我们就一起来详细看看Junit5参数化测试的方法. 部署和依赖 和Junit4相比,Junit5框架更多在向测试平台演进.其核心组成也 ...
- linq 动态排序 order by
项目查询数据库使用的是linq 语法,可是后期需要用到不同字段的排序.各种纠结! 在网上找了各种资料 后面才找到两种方法 using System; using System.Collections. ...
- C# ——Parallel类
一.Parallel类 Parallel类提供了数据和任务的并行性: 二.Paraller.For() Paraller.For()方法类似于C#的for循环语句,也是多次执行一个任务.使用Paral ...
- 【转载】C#中string类使用Replace方法来替换字符串
在C#的字符串操作过程中,有时候需要替换字符串中的某个子字符串,此时就可以使用到字符串类自带的Replace方法来实现,Replace方法将查找到所有符合被替换的子字符串,然后将之全部替换为目标字符串 ...
- jQuery中的 AJAX
jQuery库中支持AJAX的操作,功能十分完善 详细请参考官方文档:https://www.jquery123.com/category/ajax/ 首先需要引入jquery文件!!! $.ajax ...
- stm32 CAN过滤器组
在互联型产品中, CAN1和CAN2分享28个过滤器组 其它STM32F103xx系列产品中有14个过滤器组 位宽设置 四种配置方式: 1个32位的屏蔽位模式 2个32位的标识符列表模式,可以过滤2个 ...
- MySQL Lock--gap before rec insert intention waiting
在事务插入数据过程中,为防止其他事务向索引上该位置插入数据,会在插入之前先申请插入意向范围锁,而如果申请插入意向范围锁被阻塞,则事务处于gap before rec insert intention ...
- Kubernetes 1.15部署日记-使用kubeadm--<7-8>
7. 在k8s集群中run一个应用 nginx已经跑起来了到此kubernetes集群部署结束了. 8. 总结 此次部署kubernetes的起因是AI团队中的kubernetes项目跑在其他IP段网 ...