Java 内部json对象更新

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”中的更改,并且应该在保存/更新调用时将对象更改写入数据库,那么这看起来是不相关

我有一个关于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更改

@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";

    }