实体类有继承父类,但父类没有单独标明注解

异常表现

Caused by: org.hibernate.AnnotationException: No identifier specified for entity: com.xxx.ProjectDTO

解决方式

  1. 可以看到ProjectDTO有继承一个BaseDTO,那么在父类中肯定存在某些字段需要与数据库表字段对应
  2. 因此类父需要使用@MappedSuperclass标注为映射的父类,即可解决上述问题
    @Entity
    @Table(name = "al_project")
    public class ProjectDTO extends BaseDTO { ... } @MappedSuperclass
    public class BaseDTO { ... }

自定义接口实现了JpaRepository,但没有单独标明注解

异常表现

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'baseJpaRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object
...
Caused by: java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object

解决方式

  1. 上述报错中提到BaseJpaRepository创建失败,其实是因为该接口继承JpaRepository,继承CrudRepository同理
  2. 导致SpringBoot把该类认为是Jpa的某一个存储库,所以需要添加@NoRepositoryBean告知SpringBoot该类不是一个存储库
@NoRepositoryBean
public interface BaseJpaRepository<T, ID> extends JpaRepository<T, ID> { ... }

实体类创建后没有单独标明注解@Entity

异常表现

  1. 需要注意的是这个错误可能不完全以下内容
***************************
APPLICATION FAILED TO START
***************************
...
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
...

解决方式

  1. 检查所有的实体类,并添加全部上@Entity注解
  2. 需要注意的是以下实体类ConfigDTO继承了BaseDTO,而BaseDTO作为父类不应该使用@Entity注解
  3. 而使用应该问题上述提到中的@MappedSuperclass标明的英文映射父类
@Entity
@Table(name = "al_config")
public class ConfigDTO extends BaseDTO { ... }

实体类中的某个字段是一个对象,却错误的使用了@Column注解

异常表现

Caused by: org.hibernate.MappingException: Could not determine type for: com.asing1elife.teamnote.dto.ProjectGroupDTO, at table: al_project, for columns: [org.hibernate.mapping.Column(project_group)]

解决方式

  1. 以下类中ProjectGroupDTO应该是一个对象,所以根据应该具体映射情况决定的英文使用@ManyToOne还是@OneToMay,或其他对象映射规则
@Entity
@Table(name = "al_project")
public class ProjectDTO extends BaseDTO {
@Column
private ProjectGroupDTO projectGroup;
}

实体类ID使用了错误的生成规则

异常表现

java.sql.SQLSyntaxErrorException: Table 'asl_station.hibernate_sequence' doesn't exist
public class BaseDTO {
@Id
@GeneratedValue
private Long id = 0L;
}

解决方式

  1. 上述类中在ID上通过@GeneratedValue直接指定生成规则,就会抛出上述异常
  2. 因为默认的生成规则是 GeneratedType.AUTO
  3. 而我们在创建表时,通常使用的ID自增规则都是auto_increment,这对应的应该是GenerationType.IDENTITY
  4. 所以应该使用如下方式指定ID的自增规则
public class BaseDTO {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id = 0L;
}

修改JPA的字段命名规则为驼峰式

异常表现

  1. 在实体类和数据库中对应的字段都是createTime,但是JPA在连接对应表时却抛出如下错误
  2. 因为JPA默认的字段映射规则是下划线风格
Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'create_time' in 'field list'
@Column
private Date createTime = DateUtil.getSysDate();

解决方式

  1. 在配置文件中指定JPA的字段映射规则为驼峰式即可
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

获取单个实体类JSON转换异常

异常表现

  1. Hibernate的获取单个实体类数据后,为会每个实体类添加一个hibernateLazyInitializer属性,改属性在进行JSON转换时抛出异常
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.asing1elife.teamnote.core.bean.ResponseData["data"]->com.asing1elife.teamnote.dto.OrganizationDTO$HibernateProxy$f3Tr4vBI["hibernateLazyInitializer"])

解决方式一

  1. 在实体类顶部添加@JsonIgnoreProperties("hibernateLazyInitializer"),确保数据转换时会过滤掉休眠生成的属性

    @JsonIgnoreProperties("hibernateLazyInitializer")
    public class BaseDTO { ... }

解决方式二

  1. 上述根据报错disable SerializationFeature.FAIL_ON_EMPTY_BEANS可以尝试将JSON转换时的以下属性设置为false
spring:
jackson:
serialization:
fail-on-empty-beans: false

前端数据传递到后端过程中,反序列失败

异常表现

  1. 杰克逊反序列化时需要无参构造函数,因为数据对应的实体类某个对象属性没有无参构造函数,就会抛出以下异常
(although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)

解决方式

  1. 检查实体类自身以及所有对象属性,为每个对象添加对应的无参构造函数即可解决
  2. 自参考博客园
 
 
 
 

SpringBoot + JPA问题汇总的更多相关文章

  1. 补习系列(19)-springboot JPA + PostGreSQL

    目录 SpringBoot 整合 PostGreSQL 一.PostGreSQL简介 二.关于 SpringDataJPA 三.整合 PostGreSQL A. 依赖包 B. 配置文件 C. 模型定义 ...

  2. 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础授权权限

    上一篇<[原]无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限>介绍了实现Shiro的基础认证.本篇谈谈实现 ...

  3. 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限

    开发环境搭建参见<[原]无脑操作:IDEA + maven + SpringBoot + JPA + Thymeleaf实现CRUD及分页> 需求: ① 除了登录页面,在地址栏直接访问其他 ...

  4. 带着新人学springboot的应用08(springboot+jpa的整合)

    这一节的内容比较简单,是springboot和jpa的简单整合,jpa默认使用hibernate,所以本质就是springboot和hibernate的整合. 说实话,听别人都说spring data ...

  5. springboot+jpa+mysql+redis+swagger整合步骤

    springboot+jpa+MySQL+swagger框架搭建好之上再整合redis: 在电脑上先安装redis: 一.在pom.xml中引入redis 二.在application.yml里配置r ...

  6. springboot+jpa+mysql+swagger整合

    Springboot+jpa+MySQL+swagger整合 创建一个springboot web项目 <dependencies> <dependency>      < ...

  7. SpringBoot JPA + H2增删改查示例

    下面的例子是基于SpringBoot JPA以及H2数据库来实现的,下面就开始搭建项目吧. 首先看下项目的整体结构: 具体操作步骤: 打开IDEA,创建一个新的Spring Initializr项目, ...

  8. SpringBoot Jpa入门案例

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons) 我们先来了解一下是什么是springboot jpa,springboo ...

  9. SpringBoot JPA懒加载异常 - com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy

    问题与分析 某日忽然发现在用postman测试数据时报错如下: com.fasterxml.jackson.databind.JsonMappingException: could not initi ...

随机推荐

  1. vue在窗口大小改变时强制刷新组件的方法

    mounted () { window.onresize = () => { return (() => { this.$forceUpdate(); })() } }

  2. win系统上Anaconda国内镜像配置

    清华镜像2019.6.15已恢复 中科大镜像2019.7.1停机维护后恢复 1.打开anaconda prompt 2.添加清华镜像1:https://mirrors.tuna.tsinghua.ed ...

  3. 初识代理——Proxy

    无处不在的模式——Proxy 最近在看<设计模式之禅>,看到代理模式这一章的时候,发现自己在写spring项目的时候其实很多时候都用到了代理,无论是依赖注入.AOP还是其他,可以说是无处不 ...

  4. 【Java例题】5.4 子串出现的次数

    4. 输入一个字符串s,再输入另一个字符串t,在s中查找t出现的次数. package chapter5; import java.util.Scanner; public class demo4 { ...

  5. Vue系列:.sync 修饰符的作用及使用范例

    作用:对传递给子组件的 prop 数据进行“双向绑定”.(正常情况下,prop 的数据都是单向数据流) 代码参考如下: 父组件部分 子组件部分

  6. Netty基础系列(4) --堆外内存与零拷贝详解

    前言 到目前为止,我们知道Nio当中有三个最最核心的组件,分别是:Selelctor,Channel,Buffer.在Netty基础系列(3) --彻底理解NIO 这一篇文章中只是进行了大致的介绍. ...

  7. 【0808 | Day 11】文件的高级应用/修改以及函数的定义/使用/参数

    文件的高级应用 一.三种模式 'r+'模式 with open('test.py','r',encoding = 'utf8') as fr: print(fr.writable()) fr.writ ...

  8. linux100day(day3)--常用文本处理命令和vim文本编辑器

    今天,来介绍几个常用文本处理命令和vim文本编辑器 day3--常用文本处理命令和vim文本编辑器 col,用于过滤控制字符,-b过滤掉所有控制字符,这个命令并不常用,但可以使用man 命令名| co ...

  9. 在Linux和Windows系统中输出目录结构

    前言 一直以来就想在写文章时,能以文本形式(而不是截图)附上项目的目录结构,今天终于知道怎么操作了,在这分享一下. Linux 首先说下Linux上输出目录结构的方法. yum安装tree 需要支持t ...

  10. 阿里P8架构师浅析——MySQL的高并发优化

    一.数据库结构的设计 1.数据行的长度不要超过8020字节,如果超过这个长度的话在物理页中这条数据会占用两行从而造成存储碎片,降低查询效率. 2.能够用数字类型的字段尽量选择数字类型而不用字符串类型的 ...