微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringBoot中JPA更新时部分字段无效怎么解决

这篇“SpringBoot中JPA更新时部分字段无效怎么解决文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot中JPA更新时部分字段无效怎么解决文章吧。

相关源码

实体类定义

@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更新时部分字段无效怎么解决”这篇文章内容,相信大家都有了一定的了解,希望小编分享内容对大家有帮助,若想了解更多相关的知识内容,请关注编程之家行业资讯频道。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐