Java 内部json对象更新
我有一个关于Ebean中JSON的问题 假设我有一个对象A扩展模型,A有一个集合字段@DbJson 如果将对象添加到此集合并保存或更新对象 它工作正常,我可以从数据库接收更改的 但如果我的A是另一个对象内的字段“A”,则p扩展模型 将一些新对象添加到A中的集合后,不会影响P对象保存/更新上的A对象 对我来说,如果对象A被通知(标记为dirty)其集合中的更改,并且保存/更新将影响数据库,那么对象p也应该知道其字段“A”中的更改,并且应该在保存/更新调用时将对象更改写入数据库,那么这看起来是不相关的 我想知道有没有办法更新A中包含的内部集合,只保存/更新外部对象p? 是否有更好的方法来管理模型中的内部JSON? 这里有一个例子 类p包含一个对象集合,如果我对@DbJson collections之外的其他a字段做了一些更改,p.update()将保存所有a更改Java 内部json对象更新,java,json,postgresql,ebean,Java,Json,Postgresql,Ebean,我有一个关于Ebean中JSON的问题 假设我有一个对象A扩展模型,A有一个集合字段@DbJson 如果将对象添加到此集合并保存或更新对象 它工作正常,我可以从数据库接收更改的 但如果我的A是另一个对象内的字段“A”,则p扩展模型 将一些新对象添加到A中的集合后,不会影响P对象保存/更新上的A对象 对我来说,如果对象A被通知(标记为dirty)其集合中的更改,并且保存/更新将影响数据库,那么对象p也应该知道其字段“A”中的更改,并且应该在保存/更新调用时将对象更改写入数据库,那么这看起来是不相关
@Entity
@Table(name = "P")
public class P extends Model {
@Id
private long id;
@MapKey(name = "id")
@OneToMany(orphanRemoval = true, mappedBy = "p", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
private final Map<Long, A> as = new HashMap<>();
}
测试抛出异常
public static void main(String[] args) {
P pOrigin = new P();
pOrigin.save();
SomeObject o = new SomeObject();
o.setFieldToChange(1);
A a = new A();
a.getObjs().add(o);
a.save();
pOrigin.getAs().put(a.getId(), a);
pOrigin.save();
//==========
P p1 = DB.find(P.class, pOrigin.getId());
A a1 = p1.getAs().get(a.getId());
a1.getObjs().add(o);
p1.update();
P p2 = DB.find(P.class, pOrigin.getId());
A a2 = p2.getAs().get(a.getId());
assert a2.getObjs().size() == a1.getObjs().size() : "new object was not save to @DbJson collection";
}
因此,问题是:
我想知道有没有办法更新A中包含的内部集合,只保存/更新外部对象p?
是否有更好的方法来管理模型中的内部JSON?a1.update()有效吗?也就是说,从P到A的级联问题还是A看起来不脏?如果是从P到A的级联,那么它是否使用列表而不是映射?最终,如果您认为您遇到了一个bug,您可以创建一个失败的测试并记录一个问题?
public class SomeObject {
private int fieldToChange;
}
public static void main(String[] args) {
P pOrigin = new P();
pOrigin.save();
SomeObject o = new SomeObject();
o.setFieldToChange(1);
A a = new A();
a.getObjs().add(o);
a.save();
pOrigin.getAs().put(a.getId(), a);
pOrigin.save();
//==========
P p1 = DB.find(P.class, pOrigin.getId());
A a1 = p1.getAs().get(a.getId());
a1.getObjs().add(o);
p1.update();
P p2 = DB.find(P.class, pOrigin.getId());
A a2 = p2.getAs().get(a.getId());
assert a2.getObjs().size() == a1.getObjs().size() : "new object was not save to @DbJson collection";
}