iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SpringDataJPA在Entity中常用的注解有哪些
  • 253
分享到

SpringDataJPA在Entity中常用的注解有哪些

2023-06-21 23:06:50 253人浏览 独家记忆
摘要

这篇文章主要介绍了springDataJPA在Entity中常用的注解有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先我们常用的注解包括@Entity、@Table、

这篇文章主要介绍了springDataJPA在Entity中常用的注解有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

首先我们常用的注解包括

@Entity、@Table、@Id、@IdClass、@GeneratedValue、@Basic、@Transient、@Column、@Temporal、@Enumerated、@Lob

  • @Entity使用此注解定义的对象将会成为被JPA管理的实体,将映射到指定的数据库表@Entity(name =“user”)其中name默认是此实体类的名字,全局唯一。

  • @Table指定此实体类对应的数据库的表名。若注解不加名字则系统认为表名和实体类的名字相同

  • @Id定义字段为数据库的主键,一个实体里面必须有一个。

  • @IdClass利用外部类的联合主键,其中外部类必须满足一下几点要求

必须实现Serializable接口。

必须有默认的public无参数的构造方法。

必须覆盖equals和hashCode方法。equals方法用于判断两个对象是否相同,EntityManger通过find方法来查找Entity时是根据equals的返回值来判断的。hashCode方法返回当前对象的哈希码,生成的hashCode相同的概率越小越好,算法可以进行优化

  • @GeneratedValue为主键生成策略

默认为AUTO即JPA自动选择合适的策略

IDENTITY 适用于MySQL,策略为自增

SEQUENCE 通过序列生成主键通过@SquenceGenerator指定序列名Mysql不支持

TABLE 框架由表模拟产生主键,使用该策略有利于数据库移植

  • @Basic表示此字段是映射到数据库,如果实体字段上没有任何注解默认为@Basic。其中可选参数为@Basic(fetch =FetchType.LAZY, optional =false)其中fetch默认为EAGER立即加载,LAZY为延迟加载、optional表示该字段是否可以为null

  • @Transient和@Basic的作用相反,表示该字段不是一个到数据库表的字段映射,JPA映射数据库的时候忽略此字段。

  • @Column定义实体内字段对应的数据库中的列名

@Column(name = "real_name", unique = true, nullable = false, insertable = false, updatable = false, columnDefinition = "varchar", length = 100)

name对应数据库的字段名,可选默认字段名和实体属性名一样

unique是否唯一,默认false,可选

nullable是否允许为空。可选,默认为true

insertable执行insert的时候是否包含此字段。可选,默认true

updatable执行update的时候是否包含此字段。可选,默认true

columnDefinition表示该字段在数据库中的实际类型

length数据库字段的长度,可选,默认25

  • @Temporal用来设置Date类型的属性映射到对应精度的字段

@Temporal(TemporalType.DATE)    //映射为只有日期@Temporal(TemporalType.TIME)    //映射为只有时间@Temporal(TemporalType.TIMESTAMP)  //映射为日期+时间
  • @Lob将字段映射成数据库支持的大对象类型,支持一下两种数据库类型的字段。(注意:Clob、Blob占用的内存空间较大,一般配合@Basic(fetch= FetchType.LAZY)将其设置为延迟加载)

Clob:字段类型为Character[]、char[]、String将被映射为Clob

Blob:字段类型为Byte[]、byte[]和实现了Serializable接口的类型将被映射为Blob类型

接下来介绍关联关系注解

@JoinColumn、@OneToOne、@OneToMany、@ManyToOne、@ManyToMany、@JoinTable、@OrderBy

1.@JoinColumn定义外键关联字段名称,其中属性意义如下

  • name表示目标表的字段名,必填

  • referencedColumnName本实体表的字段名,非必填,默认是本表的ID

  • unique外键字段是否唯一,可选,默认false

  • nullable外键字段是否允许为空,可选,默认true

  • insertable新增操作的时候是否跟随一起新增,可选,默认true

  • updatable更新时候是否一起更新。可选,默认true

  • @JoinColumn主要配合@OneToOne、@ManyToOne、@OneToMany一起使用,单独使用没有任何意义。

  • @JoinColumns定义多个字段的关联关系

2.@OneToOne一对一关联关系

@OneToOne(targetEntity = SysRole.class, cascade = {CascadeType.PERSIST,CascadeType.REMOVE,CascadeType.REFRESH,CascadeType.MERGE},fetch = FetchType.LAZY,optional = false,mappedBy = "userId",orphanRemoval = true)
  • targetEntity非必填,默认为该字段的类型

  • cascade级联操作策略CascadeType.PERSIST级联新建,CascadeType.REMOVE级联删除,CascadeType.REFRESH级联刷新,CascadeType.MERGE级联更新,CascadeType.ALL四项全选

  • fetch数据加载方式,默认EAGER(立即加载),LAZY(延迟加载)

  • optional是否允许为空。可选,默认为true

  • mappedBy关联关系被谁维护,非必填,一般不需要特别指定。注意:只有关系维护方才能操作两者的关系,被维护方即使设置了维护方的属性进行存储也不会更新外键关联。mappedBy不能与@JoinColumn或者@JoinTable同时使用。mappedBy的值指的是另一方的实体里面属性的字段,而不是数据库字段,也不是实体对象的名字,即另一方配置了@JoinColumn或者@JoinTable注解的属性的字段名称

  • orphanRemoval是否级联删除,和CascadeType.REMOVE效果一样,两种只要配置一种就会自动级联删除

  • @OneToOne需要配合@JoinColumn一起使用,可以双向关联,也可以只配置一方。下面我们举一个例子:假设一个用户只拥有一个角色SysUser如下

@OneToOne@JoinColumn(name = "role_id",referencedColumnName = "user_id")private SysRole role;//若需要双向关联则SysRole的内容如下@OneToOne(mappedBy = "role")private SysUser user;//当然也可以不用选择mappedBy,使用下面效果也一样@OneToOne@JoinColumn(name = "user_id",referencedColumnName = "role_id")private SysUser user;

3.@OneToMany和@ManyToOne一对多和多对一的关联关系

@Entity@Table(name="user")class User implements Serializable{    private Long userId;    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY,mappedBy = "user")    private Set<Role> setRole;}@Entity@Table(name="role")class Role{    private Long roleId;    @ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER)    @JoinColumn(name = "user_id")//user_id字段作为外键    private User user;}

4.@OrderBy关联查询的时候排序,一般和@OneToMany一起使用

@Entity@Table(name="user")class User implements Serializable{    private Long userId;    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY,mappedBy = "user")    @OrderBy("role_name DESC")    private Set<Role> setRole;}

5.@JoinTable关联关系表一般和@ManyToMany一起使用

@ManyToMany表示多对多,也有单双向之分,单双向和注解无关,只看实体类之间是否相互引用

@JoinTable(name = "sys_user_role",  joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},        inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id")})@ManyToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.EAGER)private List<SysRole> roles;
  • @JoinTable中name表示中间关联关系表名

  • @JoinTable中的joinColumns表示主链接表的字段,即当前对象内对应的连接字段

  • @JoinTable中inverseJoinColumns表示被连接的表的外键字段

6.Left Join、Inner join和@EntityGraph

当使用@ManyToMany、@ManytoOne、@OneToMany、@OneToOne关联关系的时候sql执行查询的时候总是一条主查询语句和N条子查询语句组成,运行的效率较地下,如果子对象有N个就会执行N+1条SQL,JPA2.1推出的@EntityGraph、@NamedEntityGraph用来提高查询效率@NamedEntityGraph配置在@Entity上面,而@EntityGraph配置在Repository的查询方法上面

@NamedEntityGraph(name = "User.addressEntityList",attributenodes = {@NamedAttributeNode("setRole"),@NamedAttributeNode("dept")})@Entity@Table(name="user")public class User implements Serializable{    private Long userId;    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY,mappedBy = "user")    @OrderBy("role_name DESC")    private Set<Role> setRole;    @OneToOne    @JoinColumn(name = "dept_id",referencedColumnName = "user_id")    private Department dept;}

然后只需要在Repository查询方法上面加上@EntityGraph注解即可,其中value就是@NamedEntityGraph中的Name,配置如下

@EntityGraph(value ="User.addressEntityList")List<User> findAll();

对于关系查询需要注意以下事项:

  • 所有的注解要么全部配置在字段上,要么全部配置在get方法上面,不能混用,混用项目就会启动不起来

  • 所有关联都支持单双向关联。当JSON序列化的时候使用双向注解会产生死循环,需要人为手动转换一次,或者使用@jsonIgnore

  • 所有的关联表一般不需要建立外键索引

感谢你能够认真阅读完这篇文章,希望小编分享的“SpringDataJPA在Entity中常用的注解有哪些”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: SpringDataJPA在Entity中常用的注解有哪些

本文链接: https://www.lsjlt.com/news/301311.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringDataJPA在Entity中常用的注解有哪些
    这篇文章主要介绍了SpringDataJPA在Entity中常用的注解有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先我们常用的注解包括@Entity、@Table、...
    99+
    2023-06-21
  • SpringDataJPA在Entity中常用的注解介绍
    目录首先我们常用的注解包括接下来介绍关联关系注解首先我们常用的注解包括 @Entity、@Table、@Id、@IdClass、@GeneratedValue、@Basic、@Tra...
    99+
    2024-04-02
  • SpringBoot中常用的注解有哪些
    这篇文章主要介绍了SpringBoot中常用的注解有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、@SpringBootApplication此注解是Spring B...
    99+
    2023-06-21
  • SpringBoot中有哪些常用的注解
    这篇文章将为大家详细讲解有关SpringBoot中有哪些常用的注解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。@SpringBootApplication...
    99+
    2024-04-02
  • SpringMVC中有哪些常用注解
    SpringMVC中有哪些常用注解?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。MVC简介MVC 全名是 Model View Controller,是模型(model)-视图...
    99+
    2023-06-15
  • spring boot中有哪些常用的注解
    spring boot中有哪些常用的注解?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。@RestController和@RequestMapping注解0重要的一个新的改进...
    99+
    2023-05-31
    springboot 中有 注解
  • SpringMVC常用的注解有哪些
    SpringMVC常用的注解有:1. @Controller:用于标识一个类是SpringMVC的控制器。2. @RequestMa...
    99+
    2023-09-13
    SpringMVC
  • 常用的Springboot注解有哪些
    常用的Spring Boot注解有以下几种:1. @SpringBootApplication:该注解用于标记启动类,表示该类是Sp...
    99+
    2023-10-11
    springboot
  • java常用注解有哪些
    Java常用注解包括:1. @Override:用于标注方法覆盖父类方法。2. @Deprecated:用于标注不推荐使用的方法或类...
    99+
    2023-05-29
    java常用注解 java
  • hibernate常用注解有哪些
    Hibernate常用注解有:1. @Entity:指示该类是一个实体类,对应数据库中的一个表。2. @Table:指定实体类对应的...
    99+
    2023-09-16
    hibernate
  • mybatis常用注解有哪些
    MyBatis常用的注解有以下几种:1. @Mapper:用于标识该接口是一个MyBatis的Mapper接口。2. @Select...
    99+
    2023-09-16
    mybatis
  • SpringBoot常用注解有哪些
    这篇文章给大家分享的是有关SpringBoot常用注解有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  SpringBoot注解  @SpringBootApplication:开启Spring Boot自...
    99+
    2023-06-02
  • JavaWeb中常用的请求传参注解有哪些
    这篇文章主要介绍“JavaWeb中常用的请求传参注解有哪些”,在日常操作中,相信很多人在JavaWeb中常用的请求传参注解有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaWeb中常用的请求传参注解...
    99+
    2023-07-05
  • Mybatis常见注解有哪些
    本篇内容主要讲解“Mybatis常见注解有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mybatis常见注解有哪些”吧!当下,注解非常流行,以前很长篇的代码,现在基本上一个注解就能搞定。那...
    99+
    2023-06-07
  • Spring Data JPA 实体类中常用注解有哪些
    本篇内容主要讲解“Spring Data JPA 实体类中常用注解有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Data J...
    99+
    2023-06-25
  • Spring MVC的常用注解有哪些及怎么用
    这篇文章主要介绍了Spring MVC的常用注解有哪些及怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring MVC的常用注解有哪些及怎么用文章都会有所收获,下面我...
    99+
    2024-04-02
  • java8中注解的用法有哪些
    这篇文章主要介绍了java8中注解的用法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java8中注解的用法有哪些文章都会有所收获,下面我们一起来看看吧。1、定义包装注释,包括实际注释的数组。@inter...
    99+
    2023-06-30
  • spring中的注解有哪些
    spring中的注解有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Spring中的注解大概可以分为两大类:1)spring的bean容器相关的注解,或者说bean工厂相关...
    99+
    2023-05-30
    spring 注解
  • Spring Boot Rest常用框架注解有哪些
    本篇内容主要讲解“Spring Boot Rest常用框架注解有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Boot Rest常用框架...
    99+
    2023-07-02
  • Spring常用的注入方式有哪些
    Spring常用的注入方式有以下几种:1. 构造器注入(Constructor Injection):通过构造器来注入依赖对象。2....
    99+
    2023-08-15
    Spring
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作