如何解决JSONB 列即使在选择上也没有进行任何更改时会创建审计条目
我对这个主题很陌生,所以这可能是我遗漏的东西,但我面临着 Hibernate Envers 的一个问题,其中 JSONB 列导致添加审计条目,即使没有对内容进行任何更改列,即使我只是在做一个选择。
这里没有做任何特别的事情,只是有一个带有控制器、服务、存储库(分页和排序)和一个 DTO 的 Web 服务来将内部实体转换为面向客户端的实体。
我的配置是:
- PostgreSQL 10
- Spring Boot Web + JPA + Hibernate + Envers
- 使用 vladmihalcea 休眠类型,JsonBinaryType
示例代码:
@Audited
@Entity
@Table(name = "tbl_sometable",schema="public")
@TypeDef(name = "jsonb",typeClass = JsonBinaryType.class)
public class SomeObject{
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private UUID id;
@NonNull
@SomeColumnConstraint
@Type(type="jsonb")
@Column(name="someColumnName",columnDefinition="jsonb")
private Map<String,Object> configItemValue = new HashMap<String,Object>();
}
我正在使用没有列级审计的 Envers,但我已经打开了列级,然后我可以看到 _MOD 列中唯一带有“true”的列是 JSONB - 这是为所有 JSONB 列设置的.其他非 JSONB 列均未设置为“true”。
当我将 JSONB 列设置为 @NotAudited 时,不会在选择时创建审核条目。
我尝试创建自定义方言,但这并没有解决问题。
为了解决这个问题,我已将所有 JSONB 列设置为 @NotAudited 并确保在对实体的每次更新时我都设置了 LastUpdatedDate 以确保我获得审核条目,因此最终这不会导致我问题在我的应用程序中,但这似乎是一个错误。
想知道是否有其他人遇到过这个问题,以及他们是否找到了解决方案。
解决方法
问题是该值被认为是脏的/不等于原始值。也许某处存在某种平等方法的错误。您可以从这里开始调试:https://github.com/vladmihalcea/hibernate-types/blob/master/hibernate-types-5/src/main/java/com/vladmihalcea/hibernate/type/json/internal/JsonTypeDescriptor.java#L76
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。