学习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 ...
随机推荐
- 使用guava cache在本地缓存热点数据
某些热点数据在短时间内可能会被成千上万次访问,所以除了放在redis之外,还可以放在本地内存,也就是JVM的内存中. 我们可以使用google的guava cache组件实现本地缓存,之所以选择gua ...
- TZOJ5697: 数据结构实验:归并排序
#include<stdio.h> #include<stdlib.h> void merge(int a[], int start,int mid,int end) { )) ...
- 【C#】上级实验四
1.虚方法练习 设计一个控制台应用程序,定义一个Shape类,具体要求如下: ()类中定义2个私有字段长度(length).宽度(breadth). ()类中定义相应公有属性分别对应上述2个字段: ( ...
- win7远程服务器发生身份验证错误,要求的函数不受支持
远程服务器发生身份验证错误,要求的函数不受支持,远程登录服务器以前都是正常的,今天登录远程桌面就一直是这样的错误.记录一下解决方法. 方法一:卸载补丁KB41037181.打开控制面板,找到“程序和功 ...
- docker 入坑3
查看镜像 docker images [OPTIONS] [REPOSITORY[:TAG]] -a, --all=false -f, --filter=[] --no-trunc=false -q, ...
- Python接口自动化基础---token鉴权
有些登录使用cookie,有些登录需要token验证,token传参一般有两种形式,一种是在请求头中,一种是使用URL传参 这里举例说明一下请求头中的token方式: #登录 param1={'use ...
- z7z8记录
http://www.ypppt.com/ ppt模板地址
- atan、atanf、atanl、atan2、atan2f、atan2l
很久不发博客了,今天在园中计算各种角,于是复习下fan正切函数 计算x的反正切值 (atan.atanf和 atanl) 或y/x 的反正切值 (atan2.atan2f和 atan2l). ...
- 机器码-字节码-CLR-JIT-托管代码-非托管代码-unsafe-GC-fixed
0. 机器码 直接由机器码对应平台的CPU执行的指令集, 因此无法在其他指令集的CPU上运行. 无法跨平台. 由本地代码编译得到. (托管代码通过JIT生成) 1. 字节码 即 bytecode 是一 ...
- 嵌入式处理器通过UART实现scanf和printf
#include <stdint.h> #include <stdarg.h> extern int vsscanf(const char *, const char *, v ...