10

我已经开始处理我的 JPA 事件(postUpdate),当我更新实体上的属性时,它们会正确触发,但映射为 @ElementCollection 的属性除外。

这是限制吗?配置选项?

这是我实体的一部分

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Pckg {
    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(nullable = false, length = 100)
    private String title;

    @ElementCollection
    @CollectionTable (
        name = "PckDest",
        joinColumns = @JoinColumn(name = "package_id", nullable = false)
    )
    @Column(name = "destination", nullable = false, length = 150) 
    private List<String> destinations;
    ...

换句话说,如果我更改“标题”,我的听众会捕捉到更改,但是当我更改“目的地”时不会发生同样的情况

我通过 Spring(3.1)使用 JPA 和休眠(4.0)作为提供者

谢谢

4

3 回答 3

2

最后我们解决了这个添加乐观锁的问题@Version,它强制休眠写入主父表并调用我们的侦听器。

在任何情况下,这仍然无法按照应有的方式工作,但最重要的是,乐观锁定也没有什么坏处

谢谢

于 2012-12-05T04:06:19.113 回答
1

所有者端没有更新(Pck 表),更新的是保存收集数据的表(PckDest)。

我认为甚至可以说更改集合的内容可以被视为更新,因为它可以并且通常会被实现为删除和插入。

我认为您必须在实体管理生命周期之外处理此类行为,或者在所有者实体内部拥有某种字段,该字段会在列表更改时更新(例如某种校验和),以便在您更改列表时也是父实体必须更新(虽然我不知道这是否是个好主意)。

于 2012-11-29T07:56:37.040 回答
0

也许这个链接可以帮助你:

使用休眠 4.0 和 spring 3.1.0.release 的事件监听器?

看起来 Hibernate 4 和注册 EntityListeners 有一些变化。

于 2012-12-05T08:15:59.530 回答