Python 官方文档:入门教程 => 点击学习
目录相关源码计算属性插入或更新时设置默认值JPA基本数据类型关联类型属性综上最近用JPA写业务代码,发现了一个奇怪的bug,在通过注解自动更新时,部分字段在调试时可以找到,却没有被自
最近用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;
}
相关业务语句如下,用于更新mxGraphModel
与 modelData
workSpace.setMxGraphModel(newEntity.getMxGraphModel());
workSpace.setModelData(newEntity.getModelData());
但实际执行的sql语句如下
Hibernate: update t_workspace set wupdated_at=?, wmx_graph_model=? where wid=?
如上所示,使用注解@DynamicUpdate自动更新,但是该注解只能自动更新实体属性
。而实体属性是指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更新时部分字段无效内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: SpringBoot中JPA更新时部分字段无效
本文链接: https://lsjlt.com/news/208917.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0