Spring Data JPA 常用注解
1. 创建表
@Entity
声明该类对应一个数据表实体(万事万物皆为对象)。
@Table
设置表名
@Entity
@Table(name = "user")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;省略getter/setter......
}
2. 创建主键
@Id
:声明一个字段为主键。
使用@Id
声明之后,可以使用 @GeneratedValue
指定主键生成策略。
使用 @GeneratedValue
指定主键生成策略的方式有两种:
1. 通过 @GeneratedValue 可以直接使用 JPA 内置提供的四种主键生成策略来指定主键生成策略。
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
JPA 使用枚举定义了 4 中常见的主键生成策略:
- TABLETABLE:使用一个特定的数据库表格来保存主键;
- SEQUENCE:为Oracle、PostgreSQL等不支持主键自增长的数据库提供了一种叫做“序列(sequence)"的主键生成机制;
- IDENTITY:主键自增长;
- AUTO:把主键生成策略交给持久化引擎,持久化引擎会根据数据库在以上三种主键生成策略中选择其中一种
@GeneratedValue 注解默认使用的策略是GenerationType.AUTO
。 在关系型数据库中使用GenerationType.IDENTITY
策略比较普遍一点
public @interface GeneratedValue {GenerationType strategy() default AUTO;String generator() default "";
}
一般使用 MySQL 数据库的话,使用GenerationType.IDENTITY
策略比较普遍一点(分布式系统的话需要另外考虑使用分布式 ID)。
2. 通过 @GenericGenerator声明一个主键策略,然后 @GeneratedValue使用这个策略
@Id
@GeneratedValue(generator = "IdentityIdGenerator")
@GenericGenerator(name = "IdentityIdGenerator", strategy = "identity")
private Long id;
等价于:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
3. 设置字段类型
@Column
声明字段。
示例:
设置属性 userName 对应的数据库字段名为 user_name,长度为 32,非空
@Column(name = "user_name", nullable = false, length=32)
private String userName;
设置字段类型并且加默认值:
Column(columnDefinition = "tinyint(1) default 1")
private Boolean enabled;
4. 指定不持久化特定字段
@Transient
:声明不需要与数据库映射的字段,在保存的时候不需要保存进数据库 。
如果我们想让secrect
这个字段不被持久化,可以使用 @Transient
关键字声明。
Entity(name="USER")
public class User {......@Transientprivate String secrect; // not persistent because of @Transient}
除了 @Transient
关键字声明, 还可以采用下面几种方法:
static String secrect; // not persistent because of static
final String secrect = “Satish”; // not persistent because of final
transient String secrect; // not persistent because of transient
一般使用注解的方式比较多。
5. 声明大字段
@Lob
:声明某个字段为大字段。
@Lob
private String content;
更详细的声明:
@Lob
//指定 Lob 类型数据的获取策略, FetchType.EAGER 表示非延迟 加载,而 FetchType. LAZY 表示延迟加载 ;
@Basic(fetch = FetchType.EAGER)
//columnDefinition 属性指定数据表对应的 Lob 字段类型
@Column(name = "content", columnDefinition = "LONGTEXT NOT NULL")
private String content;
6. 创建枚举类型的字段
可以使用枚举类型的字段,不过枚举字段要用@Enumerated
注解修饰。
public enum Gender {MALE("男性"),FEMALE("女性");private String value;Gender(String str){value=str;}
}
@Entity
@Table(name = "role")
public class Role {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String description;@Enumerated(EnumType.STRING)private Gender gender;省略getter/setter......
}
数据库里面对应存储的是 MAIL/FEMAIL。
7. 增加审计功能
在 JPA 中,支持在字段或者方法上进行注解@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 实现对数值设置的时间控制。
首先需要通过@EnableJpaAuditing
开启 JPA 审计功能。其中,
@CreatedDate
:表示该字段为创建时间,在这个实体被 insert 的时候,会设置值@CreatedBy
:表示该字段为创建人,在这个实体被 insert 的时候,会设置值@LastModifiedDate
:表示该字段为最终修改时间- ``@LastModifiedBy`:表示该字段为最终修改人
8. 删除/修改数据
@Modifying
注解提示 JPA 该操作是修改操作,注意还要配合@Transactional
注解使用。
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {@Modifying@Transactional(rollbackFor = Exception.class)void deleteByUserName(String userName);
}
9. 关联关系
@OneToOne
声明一对一关系@OneToMany
声明一对多关系@ManyToOne
声明多对一关系MangToMang
声明多对多关系
Spring Data JPA 常用注解相关推荐
- spring data JPA常用注解
常用注解 @Entity 作用:指定当前类是实体类. @Table 作用:指定实体类和表之间的对应关系. 属性: name:指定数据库表的名称 @ld 作用:指定当前字段是主键. @Generated ...
- spring data jpa常用配置
spring.jpa.hibernate.ddl-auto 首次程序运行时对ddl的操作 create: 每次运行该程序,没有表格会新建表格,表内有数据会清空: create-drop: 每次程序结束 ...
- Spring Data JPA OneToMany注解参数orphanRemoval,一对多删除详解
博主:爱码叔 个人博客站点: icodebook 公众号:漫话软件设计 专注于软件设计与架构.技术管理.擅长用通俗易懂的语言讲解技术.对技术管理工作有自己的一定见解.文章会第一时间首发在个站上,欢迎大 ...
- JPA: Spring Data JPA @OneToMany 注解参数 orphanRemoval,一对多删除详解
分析了OneToMany级联操作多方的插入.更新.删除.我们得到如下结论: 1.插入,建议一方设置mappedBy,好处是只会执行一条insert语句.不会执行多余的update外键的sql. 2.更 ...
- Spring data JPA 笔记
一.spring data jpa 常用注解 1. @Entity :标识实体类是JPA实体,告诉JPA在程序运行时生成实体类对应表 2. @Table :设置实体类在数据库所对应的表名 3. ...
- Spring Boot 、Spring Data JPA、Hibernate集成
###什么是JPA JPA是用于管理Java EE 和Java SE环境中的持久化,以及对象/关系映射的JAVA API 最新规范为"JSR 338:Java Persistence 2.1 ...
- Spring Data JPA问题汇总
刚进公司,发现都用的Spring Data JPA,一脸懵,知乎上遇到了一个大佬写的文章,非常详细,分享一下,我把大佬的文章整理了一下格式,比较好看了,原文链接:https://zhuanlan.zh ...
- Spring Data Jpa出现Not supported for DML operations
问题描述:在使用Spring Data Jpa的注解形式去配置删除sql语句,出现了下述异常: org.springframework.dao.InvalidDataAccessApiUsageExc ...
- Spring data Jpa,Mybatis,读写锁,@Lock 使用
Spring data jpa 支持注解式的读写锁(悲观锁),实际上这个东西硬编码也简单,但是基于Jpa 命名方式定义的Sql,只能用注解添加支持读写锁了, 不了解读写锁的可以点这里 mysql读写锁 ...
最新文章
- in the java search_Search API – Using scrolls in Java - Elasticsearch Java API 手册
- 远场语音识别,性能提升 30%,百度怎么做到的?
- UISwipeGestureRecognizer 左右事件捕捉
- 高级C语言教程-指针和存储
- 《ASCE1885的源码分析》の基于完成端口模型的TCP服务器框架
- Boost:以协程的方式实现重构echo服务器的实例
- 最小生成树基础 (Kruskal)
- 计算机网络路由器是什么东西,路由器是什么
- android任意函数绘制_图片和图形 | 可绘制对象概览
- matlab制作科学计算器,MATLAB科学计算器设计
- 2022创业基础——李家华等章节测试答案以及期末考试答案
- 视频截帧 php,php截取视频指定帧为图片_PHP
- lcd1602c语言程序分析,51单片机驱动LCD1602程序设计(C语言).doc
- 美团外卖与饿了么竞品分析
- 批量下载Landsat快视图,为批量下载Landsat Level1数据做准备
- Ubuntu系统下 .7z 文件压缩解压命令
- Verilog四位全加器
- 《Unity编辑器》截图记录Unity好看的编辑器样式
- 2021年最新无痛低操作IDEA导入gitee项目方法
- HDU-2196Computer 树形DP-经典题
热门文章
- 软考高项之范围管理-攻坚记忆
- Linux脚本之定时清空文件内容
- java泛型机制的好处_java 泛型机制
- openstack云主机无法绑定ip_智汇华云|OpenStack 虚拟机 GPU 性能优化
- split命令--linux切割(拆分)文件
- Linux命令行性能检测工具
- dede后台title怎么修改的?去掉XXXX-织梦内容管理系统V5.7
- 面向对象——构造方法(重载)
- Android 短信模块分析(四) MMS之短信的发送与接收
- ApplicationListener,Game,Screen,Stage,Actor,Group