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. Selenium自动化获取WebSocket信息

    性能日志 ChromeDriver支持性能日志记录,您可以从中获取域“时间轴”,“网络”和“页面”的事件,以及指定跟踪类别的跟踪数据. 启用性能日志 默认情况下不启用性能日志记录.因此,在创建新会话时 ...

  2. time包 — 汇总

    time包学习 package main; import ( "time" "fmt" ) func main() { //time.Time代表一个纳秒精度的 ...

  3. response letter

    1.Firstly, we would like to thank you for your kind letter and for reviewers’ constructive commentsc ...

  4. Js学习02--变量、关键字、标识符

    一.Js变量的定义 1.定义变量的目的 在内存中分配一块存储空间给变量,方便以后存储数据. 2.如何定义变量 任何变量在使用前都必须定义变量 var 变量名称 eg: var name,age,sex ...

  5. 终于明白六大类UML类图关系了

    UML,全称Unified Modeling Language,统一建模语言.而UML图分为用例图.类图.对象图.状态图.活动图.时序图.协作图.构件图.部署图等9种图. 在面向对象语言中,我们经常看 ...

  6. Authorization源码解析

    1.首先调用 Subject.isPermitted*/hasRole* 接口,其会委托给SecurityManager.SecurityManager 接着会委托给 Authorizer: Auth ...

  7. fastjson框架如何处理boolean?CURRENT_TIMESTAMP使用报错?什么是 ONLINE DDL 及 pt-online-schema-change ? getBytes引起的乱码问题?

    一.使用fastjson框架进行序列化时,若莫个参数为Boolean类型,而json里的值是其它类型时,框架如何处理? 1.true, false,正常赋值2.int类型,若为1,则为true,否则为 ...

  8. 环境配置 python 3.6+Anaconda+cuda9.0+cudNN7.0+Tensorflow

    最近在摸deepfakes代码,一堆环境要配置,过程记录一下吧. 一.安装Python3.6 Ubuntu16.04系统下默认是python2.7.网上说一般不建议卸载系统自带的python,所以保留 ...

  9. easyui的学习总结

    大家都知道easy-ui,样式虽然不怎么骚气,但是使用,小表格,很的大家欢喜 大致总结如下 :属性分为CSS片段和JS片段.CSS类定义:1.div easyui-window 生成一个window窗 ...

  10. JavaScript 继承 封装 多态实现及原理详解

    面向对象的三大特性 封装 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. ...