JSONB列即使在SELECT

问题描述 投票:0回答:2
我对这个主题非常陌生,所以这可能是我缺少的东西,但是我面临着冬眠envers的问题,即使没有对列的内容进行更改,即使我只做Select。

在这里不做任何特别特别的事情,只需使用控制器,服务,存储库(分页和分类)和DTO即可将内部实体转换为面向客户端的实体。 我的配置是:

postgresql10

spring引导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时,未在Select.

上创建审核条目。 我尝试创建自定义方言,但这并没有解决问题。

为了解决此问题,我将所有JSONB列都设置为@Notaudited,并确保在每个更新到实体的更新中,我设置了一个lastuptateddate,以确保我获得审核条目,因此最终不会在我的应用程序中引起我的问题,但是这似乎是一个错误。
想知道是否有人遇到了这个问题,是否找到了解决方案。
    

问题是该值被认为是肮脏/与原始值不相等。也许某个地方有一些平等方法。 You can start debugging here:

https://github.com/vladmihalcea/hibernate-types/blob/master/hibernate-types-5/src/main/java/com/vladmihalcea/hibernate/type/json/internal/JsonTypeDescriptor.java#L76

我有类似的问题,但是带有一个值对象而不是地图。 解决方案是实施适当的

equals

方法,以便冬眠可以检测更改。

reminder:如果您不实现
hibernate spring-data-jpa jsonb hibernate-envers
2个回答
0
投票
(和每个接口合同

hashCode),则将使用Object

的“默认”实现,该实现将返回不同一对象(例如

0
投票
)。

注意地图(或其他集合):集合通常实现

new Object().equals(new Object()) ==> false
,将其委派给其元素的

equals

。也就是说,如果您使用地图,但请放置未正确实现的值,您可能会观察到问题。

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.