【Spring Data JPA】JPA常用注解

2023-10-30

常用基本注解

示例:创建一个表,表名称叫做user_info,我们创建出它的实体类为UserInfo,用这个表与实体类之间的关系来阐述JPA一些基本注解的使用。

import java.io.Serializable;
import lombok.Data;

@Data
public class UserInfo implements Serializable {
	
	private static final long serialVersionUID = 1L;

    /**
     * id
     */
    private String id;

    /**
     * 登录名
     */
    private String loginName;

    /**
     * 密码
     */
    private String password;

}

@Entity【指定该实体类被JPA管理】

@Entity注解所代表的意思是这个实体类是被JPA管理的实体类,它有两种用法:
第一种是直接添加该注解,默认的实体名称就是对应数据库表的名称;
第二种是添加该注解,指定该实体的名称,全局唯一;
一般都是直接使用第一种方法。

import java.io.Serializable;
import lombok.Data;
import javax.persistence.Entity;

@Data
@Entity // 第一种用法
// @Entity(name = "user_info") 第二种用法
public class UserInfo implements Serializable {...}

@Table【指定该实体类对应哪张表】

@Table注解是用在实体类上,用来表示这个实体类对应那张表,@Table中的name属性就是指定对应表的表名。

import java.io.Serializable;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;

@Data
@Entity
@Table(name="user_info")
public class UserInfo implements Serializable {...}

@Id【单个主键】

@Id注解是用在属性名上,表示这个属性名是一个主键,在这里id是主键,就在id上加上@Id注解。

import java.io.Serializable;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;

@Data
@Entity
@Table(name="user_info")
public class UserInfo implements Serializable {
	
	private static final long serialVersionUID = 1L;

    /**
     * id
     */
    @Id
    private String id;

    /**
     * 登录名
     */
    private String loginName;

    /**
     * 密码
     */
    private String password;

}

@IdClass【联合主键】

@IdClass注解的作用是当你这张表有联合主键时,就可以用它指定一个实体类,表示有哪些联合主键,先做一个示例,快速知道这个的用法。
假设,user_info表中的主键分别是idloginName,那么就需要定义一个实体类去表示出有哪些属性是主键,创建出UserInfoKey实体类去表示UserInfo(user_info)的联合主键,下面为示例展示:

UserInfo实体类:

import java.io.Serializable;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.IdClass;

@Data
@Entity
@IdClass(UserInfoKey.class)
@Table(name="user_info")
public class UserInfo implements Serializable {
	
	private static final long serialVersionUID = 1L;

    /**
     * id
     */
    private String id;

    /**
     * 登录名
     */
    private String loginName;

    /**
     * 密码
     */
    private String password;

}

UserInfoKey实体类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfoKey implements Serializable {
    private String id;
    private String loginName;
}

@Column【表示实体类属性对应数据库表的哪一字段(列)】

@Column注解是用在实体类属性上,表示这个实体类属性是对应数据库表的哪一字段(列),如果实体类属性与数据库表中的字段(列)一直,就不需要添加@Column注解。

import java.io.Serializable;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.Column;

@Data
@Entity
@Table(name="user_info")
public class UserInfo implements Serializable {
	
	private static final long serialVersionUID = 1L;

    /**
     * id
     */
    @Id
    private String id;

    /**
     * 登录名
     */
    @Column(name = "login_name")
    private String loginName;

    /**
     * 密码
     */
    private String password;

}

@OneToOne

@OneToOne注解表示A数据实体与B数据实体一对一的关系。

fetch属性定义:从数据库获取数据的策略。
默认值是EAGER,表示数据必须被立即获取。另一种选择是LAZY,表示数据只有在需要时才被获取,切记:如果是SpringBoot使用LAZY模式,一定要在查询方法上加上@Transactional(readOnly = true),因为需要让SqlSession一直存在。

cascade属性定义:级联操作的类型。
级联操作是指当父实体发生变化时,子实体也跟着变化,例如,当删除父实体时,子实体也被删除。
级联操作的类型有ALL(所有操作)、PERSIST(持久化操作)、MERGE(合并操作)、REMOVE(删除操作)和REFRESH(刷新操作)。

optional属性定义:关联是否可选,默认值是true,表示关联可以为空。如果设置为false,则表示关联必须存在 。

orphanRemoval属性定义:是否移除孤儿记录。默认值是false,表示不移除孤儿记录。如果设置为true,则表示当父实体不再引用子实体时,子实体将被删除 。

mappedB属性定义:是关系的拥有方。拥有方是指具有连接列或连接表的那一方。mappedBy属性指定了另一方中与此关系相对应的属性名。


联合主键代码示例

接下来,在这里给一下代码示例:
user_info 用户表,属性有:tenant_id(租户Id)、id、login_name、password,其中,tenant_id和id是联合主键;
user_extend_info 用户扩展信息表,属性有:tenant_id(租户Id)、iduser_id、ID_card,其中,tenant_id和id是联合主键,user_id和tenant_id组成与用户表的id和tenant_id相关联;

import java.io.Serializable;
import lombok.Data;
import javax.persistence.*;

@Data
@Entity
@IdClass(CommonKey.class)
@Table(name="user_info")
public class UserInfo implements Serializable {

    /**
     * id
     */
    @Id
    @Column(name = "id")
    private String id;

    /**
     * 租户Id
     */
    @Id
    @Column(name = "tenant_id")
    private String tenantId;

    /**
     * 登录名
     */
    @Column(name = "login_name")
    private String loginName;

    /**
     * 密码
     */
    @Column(name = "password")
    private String password;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumns({
            @JoinColumn(name = "user_id", referencedColumnName = "id", insertable = false, updatable = false),
            @JoinColumn(name = "tenant_id", referencedColumnName = "tenant_id", insertable = false, updatable = false)
    })
    private UserExtendInfo userExtendInfo;
}
import java.io.Serializable;
import lombok.Data;
import javax.persistence.*;

@Data
@Entity
@IdClass(CommonKey.class)
@Table(name="user_extend_info")
public class UserExtendInfo implements Serializable {

    /**
     * id
     */
    @Id
    @Column(name = "id", insertable = false, updatable = false)
    private String id;

    /**
     * 租户Id
     */
    @Id
    @Column(name = "tenant_id", insertable = false, updatable = false)
    private String tenantId;

    /**
     * 用户Id
     */
    @Column(name = "user_Id")
    private String userId;

    /**
     * 身份证号
     */
    @Column(name = "ID_card")
    private String IDCard;


}

CommonKey实体类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommonKey implements Serializable {
    private String id;
    private String tenantId;
}




End


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Spring Data JPA】JPA常用注解 的相关文章

随机推荐

  • redis安全防护

    Redis没有实现访问控制这个功能 但是它提供了一个轻量级的认证方式 可以编辑redis conf配置来启用认证 Redis 未授权访问漏洞 Redis设置认证密码加固建议 防止这个漏洞需要修复以下三处问题 第一 修改redis绑定的IP
  • 代理ARP(Proxy Arp)

    ARP代理 代理ARP Proxy arp 的原理就是当出现跨网段的ARP请求时 路由器将自己的MAC返回给发送ARP广播请求发送者 实现MAC地址代理 善意的欺骗 最终使得主机能够通信 代理ARP的应用场景 场景1 电脑可以随意设置网关地
  • FPGA内部结构、内容及面试题

    1 FPGA内部结构及内容 2 FPGA面试题 xx
  • 这可能是目前最好的vue代码生成工具

    1 项目介绍 Esview是一款拖拽组件生成页面的工具 并且可以生成vue代码 包含拖拽生成页面 页面管理 组件管理等功能 前端采用vue和iview 生成的代码必须安装vue和iview才能使用 后台采用java springboot 作
  • python基础4——类、异常处理、常用模块

    文章目录 一 类 二 python异常处理 三 自定义模块 3 1 保留模块测试代码 3 2 添加模块使用说明 四 内置模块 4 1 os标准库 4 2 os path类 4 3 sys库 4 4 platform库 4 5 glob库 4
  • C ~ 输入 & 输出

    提到输入时 意味着要向程序填充一些数据 输入可以是以文件的形式或从命令行中进行 C 语言提供了一系列内置的函数来读取给定的输入 并根据需要填充到程序中 提到输出时 这意味着要在屏幕上 打印机上或任意文件中显示一些数据 C 语言提供了一系列内
  • qt的gui主线程while死循环避免界面卡掉

    unsigned long lTick GetTickCount while m ComResult GetTickCount lTick lt 300 Sleep 50 QCoreApplication processEvents QEv
  • JS给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置

    给定一个排序数组和一个目标值 在数组中找到目标值 并返回其索引 如果目标值不存在于数组中 返回它将会被按顺序插入的位置 请必须使用时间复杂度为 O log n 的算法 示例 1 输入 nums 1 3 5 6 target 5 输出 2 示
  • 在React中解析渲染markdown文件

    解决办法 安装marked对md文件进行解析 npm install marked save 基本使用 import marked from marked const rendererMD new marked Renderer marke
  • Windows下使用XShell上传、下载文件到linux服务器

    安装lrzsz sudo apt install lrzsz 输入下面的命令 选择本地文件上传到服务器 rz 可以进行文件上传 使用sz命令时注意需要加一个参数 下载哪一个文件到本地 sz test md
  • 如何花30多块打造Home Assistant智能家居盒子

    环境 HW悦盒ec6108v9c Home Assistant 2023 3 6 问题描述 如何花30多块打造Home Assistant智能家居盒子 解决方案 1 XY寻找HW悦盒ec6108v9c 最后35成交 2 拿到手后刷机 把系统
  • vue中不同路由共用同一个组件,缓存数据。不同路由第一次进入走加载,二次缓存

    背景 后端根据不同路由返回不同数据 使用一个组件去渲染页面 需求 一 每次新路由进入的同一个组件都要走生命周期 获取后端数据 二 第二次点击需要缓存数据 希望之前输入的数据还在 难点说明 1 由于vue设计时 同一个组件二次进入是不会再次走
  • Tableau 二、数据前处理、折线图、饼图

    二 数据前处理 折线图 饼图 1 数据前处理 导入 中国电影网电影 data xlsx 拆分 电影名 右击 电影名 选中该列 拆分 则会自动拆分 自动拆分针对数据有一定格式的 删除 电影名 拆分 电影名 拆分 将 电影名 拆分 1 右击 重
  • spreadjs学习总结(持续更新)

    前言 苦于spreadjs学习教程和案例非常少 于是自己慢慢学习 慢慢总结出来 便于复习与巩固 申请试用可以获取官方技术人员免费30天技术指导 学习常用链接 spreadjs官网 spreadjs示例 spreadjs学习视频 spread
  • Linux:Ubuntu上运行qt时报错Could not load the Qt platform plugin “xcb“ in ““ even though it was found.

    报错信息如下 Cannot load library root anaconda3 envs sifa plugins platforms libqxcb so libxcb render util so 0 cannot open sha
  • openwrt启动流程

    了解Openwrt系统的启动流程 1 1 系统介绍 任何系统的启动都是开发人员首要关注的问题 因为只有了解了系统的启动流程和启动机制 才能真正掌握一个系统 如果对系统的启动不熟悉的话 是不可能用好一个系统的 Openwrt系统也不例外 他的
  • 交叉验证(Cross-Validation)

    交叉验证 Cross Validation 目录 交叉验证 Cross Validation 一 基本方法 1 保留交叉验证 hand out cross validation 2 k折交叉验证 k fold cross validatio
  • 【android】ListView之BaseAdapter使用详解

    android中ListView是一个比较常用的控件 它用于方便的列表显示可见数据 当数据过多时 会出现滚动条 并且可以根据屏幕长度进行自适应显示 1 为什么使用BaseAdapter ListView需要设置数据适配 就是添加你需要显示的
  • BootStrap实现带有增删改查功能的表格(DEMO详解)

    前言 bootstrap的表格样式 有类似EasyUI的表格 也有卡片式表格 放到移动端显示 各有千秋 但是BootStrap自带的表格是没有操作列的 网上的资源不少 但是都是比较单一 零碎 JS CSS也经常给的不全 自己经过大概一个月左
  • 【Spring Data JPA】JPA常用注解

    文章目录 常用基本注解 Entity 指定该实体类被JPA管理 Table 指定该实体类对应哪张表 Id 单个主键 IdClass 联合主键 Column 表示实体类属性对应数据库表的哪一字段 列 OneToOne 联合主键代码示例 常用基