学习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 ...
随机推荐
- spring整合quartz报错
今天spring整合quartz报错,最后一步步排查,发现是和redis依赖冲突,最后redis升级了一下,问题解决. 总结:发现问题,逐一排查,如果是整合问题,报类加载不到的错误,大概率是和其他组件 ...
- 打印机API
转载 wangkuiyun 发布于2014-03-21 09:45:37 阅读数 4228 收藏 更新于2014-03-21 09:45:38 AbortDoc 取消一份文档的打印AbortP ...
- SpringCloud之Ribbon负载均衡及Feign消费者调用服务
目的: 微服务调用Ribbon Ribbon负载均衡 Feign简介及应用 微服务调用Ribbon Ribbon简介 1. 负载均衡框架,支持可插拔式的负载均衡规则 2. 支持多种协议,如HTTP.U ...
- CCF 2016-04-1 折点计数
CCF 2016-04-1 折点计数 题目 问题描述 给定n个整数表示一个商店连续n天的销售量.如果某天之前销售量在增长,而后一天销售量减少,则称这一天为折点,反过来如果之前销售量减少而后一天销售量增 ...
- ADO.NET 七(一个例子)
通过一个完整的实例实现课程信息管理功能的操作,包括查询.修改.删除课程信息等操作. 1) 创建课程信息表 create table StuCourse ( id int primary key ide ...
- react之高阶组件(二)
高阶组件的使用 接上文———— 一.像函数一样直接调用 import React, { Component } from 'react' import A from './A' class C ext ...
- Django:必会ORM查
1.ORM常用字段 在models.py,创建表中字段 1.1AutoField 自增的整形字段,必填参数primary_key=True,则成为数据库的主键.无该字段时,django自动创建.一个m ...
- iOS应用图片尺寸制作脚本
1.前提说明 通常 2.代码使用说明 2.1 脚本基本代码 #!/bin/sh iPhoneIcon() { sips -z 30 25 if_connected_green.png --out ./ ...
- laravel使用withCount获取列表下关联模型的数量
模型里面 <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Post extends Model ...
- python代码工具小结
目录: 1.with读.写文件 (1)with读文件 (2)with写文件 2.requests爬虫 (1)get请求 (2)post请求 1.with读.写文件 (1)with读文件 (2)with ...