在这里不做任何特别特别的事情,只需使用控制器,服务,存储库(分页和分类)和DTO即可将内部实体转换为面向客户端的实体。 我的配置是:
postgresql10
spring引导Web + JPA + Hibernate + Envers
@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>();
}
上创建审核条目。 我尝试创建自定义方言,但这并没有解决问题。
为了解决此问题,我将所有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:如果您不实现hashCode
),则将使用Object
注意地图(或其他集合):集合通常实现
new Object().equals(new Object()) ==> false
,将其委派给其元素的equals
。也就是说,如果您使用地图,但请放置未正确实现的值,您可能会观察到问题。