首页 > 解决方案 > 更新 ElementCollection 时会触发包含对象的 @PostUpdate 吗?

问题描述

我有@ElementCollection Map<User, Long> permissions一个班级。

    @ElementCollection
    @CollectionTable(name = "als_permission", joinColumns = @JoinColumn(name = "File"))
    @MapKeyJoinColumn(name = "User")
    @Column(name = "Permission")
    @JsonIgnore
    private Map<User, Integer> permissions = new HashMap<>();

我只对该集合进行了一些更改,然后调用repo.save(entity). 我看到记录确实得到了更新,但是我@PostUpdate定义的处理程序@EntityListeners似乎没有被调用。

有什么我必须指出的吗?我想我可能需要在cascade某个地方。

标签: javaspringjpaspring-data-jpaspring-data

解决方案


简短的回答:没有。

我有同样的问题得出的结论是目前这是不可能的。主要是因为打算或尚未实现,请参阅:https ://github.com/eclipse-ee4j/jpa-api/issues/167

对于测试,我创建了一个存储库来查找我可以为给定目的使用的任何事件:https ://github.com/HannesRakete/so-jpa-element-collection-events

解决方法 1

添加 @Version 以对父实体进行乐观锁定。

解决方法 2

迁移到另一种关联类型,请参阅https://thorben-janssen.com/hibernate-tips-query-elementcollection/


推荐阅读