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

异常表现

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. Mac OS 安装mysqlclient 遇到的坑~

    最近在学习Python, 因为Django连接mysql 需要安装mysqlclient, 但Mac安装遇到各种问题,这里记录一下,避免以后再踩坑. 1.   正常情况下,安装mysqlclient ...

  2. 按需制作最小的本地yum源

    [需求背景] 有时候客户的环境里面只能离线安装文件,此时可以使用CentOS的ISO光盘作为本地源进行安装,或者是制作一个包含了YUM源服务的虚拟机. 无论上面的哪一种方式都不够轻量,我们自己的组件可 ...

  3. 洛谷P2630 题解

    我先讲一下我的思路 将A,B,C,D四种操作用函数储存起来: 枚举所有可能出现的情况:A,B,C,D,AA,AB,AC,AD,BB,BC,BD,CC,CD,DD,ABC,ABD,ACD,BCD,ABC ...

  4. print('', end='')

    print函数的end参数,从python3才开始支持,所以如果要使用这种模式,需要对应使用python3

  5. python第二课--分支结构与循环结构

    if语句---分支结构 在Python中,要构造分支结构可以使用if.elif和else关键字.所谓关键字就是有特殊含义的单词,像if和else就是专门用于构造分支结构的关键字,很显然你不能够使用它作 ...

  6. javaScript基础-03 javascript语句

    一. 声明语句 var和function都是声明语句.声明或定义变量或函数. var 声明一个或者多个变量.语法如下: var a ; var b = 1; var c, d; var e = 3; ...

  7. centos7通过yum安装docker

    ##yum源安装#1.更新yumyum update #2.删除旧版本yum remove docker \docker-client \docker-client-latest \docker-co ...

  8. Could not determine type for java util List

    问题场景:在实体类中需要使用List集合存储字段,启动时找不到List类型 问题解决:在字段上添加@ElementColletion(targetClass=String.class)表示是一个集合映 ...

  9. 基于sparksql collect_list的udf定义踩坑

    多条collect_list,然后将collect_list的结果concat起来,最初使用的是concat_ws(),但是发现超过4个collect_list就会报错, select concat_ ...

  10. 基于开源中文分词工具pkuseg-python,我用张小龙的3万字演讲做了测试

    做过搜索的同学都知道,分词的好坏直接决定了搜索的质量,在英文中分词比中文要简单,因为英文是一个个单词通过空格来划分每个词的,而中文都一个个句子,单独一个汉字没有任何意义,必须联系前后文字才能正确表达它 ...