SpringBoot中JPA更新时部分字段无效

 更新时间:2023年04月12日 09:34:35   作者:此间码农  
本文主要介绍了SpringBoot中JPA更新时部分字段无效,在通过注解自动更新时,部分字段在调试时可以找到,却没有被自动更新到数据库中,下面就介绍一下解决方法

最近用JPA写业务代码,发现了一个奇怪的bug,在通过注解自动更新时,部分字段在调试时可以找到,却没有被自动更新到数据库中。

相关源码

实体类定义

@Table(name = "t_workspace")
@Entity
@DynamicInsert
@DynamicUpdate
@org.hibernate.annotations.Table(appliesTo = "t_workspace", comment = "工作空间表")
public class WorkSpaceEntity extends BaseEntity {


    @Column(columnDefinition = "TEXT COMMENT '模型图结构' ")
    private String mxGraphModel;

    @Convert(converter = ModelDataConver.class)
    @Column(columnDefinition = "mediumtext comment '存储模型数据集'")
    private ModelData modelData;
}

相关业务语句如下,用于更新mxGraphModelmodelData

workSpace.setMxGraphModel(newEntity.getMxGraphModel());
workSpace.setModelData(newEntity.getModelData());

但实际执行的SQL语句如下

Hibernate: update t_workspace set wupdated_at=?, wmx_graph_model=? where wid=?

@DynamicUpdate适用属性

如上所示,使用注解@DynamicUpdate自动更新,但是该注解只能自动更新实体属性。而实体属性是指JPA认定的基本数据类型以及关联类型属性。另外,如果实体类中存在一些计算属性或者需要在插入或更新时设置默认值的属性,那么这些属性可能会被忽略,导致出现数据不一致的情况。

计算属性

实体类中的计算属性指的是,这些属性的值是根据其他属性计算得出的,而不是从数据库中直接获取的。例如,订单实体类中的总金额属性,可能是根据订单项的数量和单价计算得出的,而不是从数据库中直接获取的。

插入或更新时设置默认值

需要在插入或更新时设置默认值的属性,指的是这些属性在插入或更新时需要设置默认值,例如创建时间、更新时间、是否删除等属性。

这些属性有以下特点:

  • 与数据库表中的字段不一一对应,可能通过计算或者默认值生成。
  • 在读取或者写入数据库时,需要特殊处理,以保证其值的正确性。
  • 在使用动态 SQL 语句生成注解时,需要特殊处理,以避免生成不必要的 SQL 语句。

JPA基本数据类型

基本类型指的是 Java 中的基本数据类型,包括 byte、short、int、long、float、double、char、boolean 等。在 JPA 中,除了基本数据类型之外,还包括一些 Java 类型,例如 String、java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp 等。

关联类型属性

通过@OneToOne、@OneToMany、@ManyToOne、@ManyToMany注解的属性

综上

ModelData属于自定义类,作为JPA的三等公民,没有被优待的权利。而JPA中对象即表的概念展现得淋漓尽致。

到此这篇关于SpringBoot中JPA更新时部分字段无效的文章就介绍到这了,更多相关JPA更新时部分字段无效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Log4j将不同Package的日志输出到不同文件的方法

    利用Log4j将不同Package的日志输出到不同文件的方法

    日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。这篇文章主要介绍了利用Log4j将不同Package的日志输出到不同文件的方法,需要的朋友可以参考借鉴,下面来跟着小编一起学习学习吧。
    2017-01-01
  • 如何将字符串、字节数组转为输入流

    如何将字符串、字节数组转为输入流

    这篇文章主要介绍了如何将字符串、字节数组转为输入流问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • SpringAnimation 实现菜单从顶部弹出从底部消失动画效果

    SpringAnimation 实现菜单从顶部弹出从底部消失动画效果

    最近做项目遇到这样一个需求,要求实现一种菜单,菜单从顶部弹入,然后从底部消失,顶部弹入时,有一个上下抖动的过程,底部消失时,先向上滑动,然后再向下滑动消失。下面给大家带来了实现代码,感兴趣的朋友一起看看吧
    2018-05-05
  • MAC下基于maven使用IDEA走读TestNG源码解析

    MAC下基于maven使用IDEA走读TestNG源码解析

    这篇文章主要介绍了MAC下基于maven使用IDEA走读TestNG源码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-06-06
  • springboot连接kafka集群的使用示例

    springboot连接kafka集群的使用示例

    在项目中使用kafka的场景有很多,尤其是实时产生的数据流,本文主要介绍了springboot连接kafka集群的使用示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Java的Struts框架中<results>标签的使用方法

    Java的Struts框架中<results>标签的使用方法

    这篇文章主要介绍了Java的Struts框架中<results>标签的使用方法,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-11-11
  • 创建并运行一个java线程方法介绍

    创建并运行一个java线程方法介绍

    这篇文章主要介绍了创建并运行一个java线程,涉及线程代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot使用注解进行分页的实现示例

    SpringBoot使用注解进行分页的实现示例

    分页使用可以说非常普遍了,有时候会需要非常灵活的方式去开启或关闭分页,尝试使用一下注解的方式来进行分页,本文主要介绍了SpringBoot使用注解进行分页的实现示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • nacos在mac上部署提示找不到或无法加载主类的解决

    nacos在mac上部署提示找不到或无法加载主类的解决

    这篇文章主要介绍了nacos在mac上部署提示找不到或无法加载主类的解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • java多线程实现下载图片并压缩

    java多线程实现下载图片并压缩

    这篇文章主要为大家详细介绍了java多线程实现下载图片并压缩,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论