gpt4 book ai didi

java - 如何实现可移植的 JPA isDirty() 方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:35:52 24 4
gpt4 key购买 nike

我正在尝试跟踪 JPA OneToMany 关联中的更改,以便通知订阅者某个对象的区域(这些关联之一)已更改的事件。我首先尝试对 List 进行专门化,它可以感知变化。

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "col_name")
private List<SomeType> oneOfManyLists = new CAArrayList<SomeType>();

我的装饰器看起来像这样:

public class CAArrayList<T> extends ArrayList<T> {

private boolean changed = false;

public CAArrayList() {
super();
}

public boolean isChanged() {
return changed;
}

// Mutable delegates
@Override
public boolean add( T e) {
changed = true;
return super.add( e );
}
....
}

在 DAO 中,我想检查哪些 OneToMany 关联已更改,不幸的是,由于 Hibernate 用 PersistentBag 包装了我的 CAArrayList,因此以下行导致了 ClassCastException:

((CAArrayList) obj.getSomeList()).isDirty()

下一个可以工作,但不能在 JPA 的不同实现之间移植。

((PersistentBag) obj.getSomeList()).isDirty()

这应该如何以可移植的方式完成?

最佳答案

我认为您尝试在错误的级别(太低)执行此操作。

与其尝试跟踪对 SomeType 列表的所有内部更改,不如将对此列表的功能更改封装在特定服务中,当必须修改此列表时,所有其他服务(和表示层)将委托(delegate)给该服务。在此集中式服务中,当服务更改 SomeType 列表时通知订阅者。

关于java - 如何实现可移植的 JPA isDirty() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7997612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com