Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Json对象更新Java(Ebean)对象_Java_Json_Deserialization_Ebean - Fatal编程技术网

如何从Json对象更新Java(Ebean)对象

如何从Json对象更新Java(Ebean)对象,java,json,deserialization,ebean,Java,Json,Deserialization,Ebean,我已经知道如何使用以下代码从Json创建对象: SomeClass someObject = Json.fromJson(someJsonNode, SomeClass.class); 我还知道如何保存和更新ebean对象 我想做的是从JsonNode中的数据更新现有对象,如下所示: SomeClass someObject = fetchMyObjectFromDb(); someObject.updateFromJson(someJsonNode); 或 在我的具体例子中,对象是一个E

我已经知道如何使用以下代码从Json创建对象:

SomeClass someObject  = Json.fromJson(someJsonNode, SomeClass.class);
我还知道如何保存和更新ebean对象

我想做的是从JsonNode中的数据更新现有对象,如下所示:

SomeClass someObject = fetchMyObjectFromDb();
someObject.updateFromJson(someJsonNode);

在我的具体例子中,对象是一个Ebean实体,这可能会有所帮助,但我没有从Ebean中找到任何helper方法

我的Json.*工具与Google Gson非常相似,但我也找不到我想要的东西

我是否必须自己使用Java反射编写代码,或者是否有更简单的方法/工具来实现这一点

编辑:我也很乐意用一种简单的方法来更新一个Ebean实体的多个属性。我找不到myEbeanObject.setattributeName,value形式的简单集合?

我想您的SomeClass扩展了ebean的模型,对吗?模型已保存。如果对从数据库中获取的对象调用save,它将被更新;如果对新对象调用save,它将被保存到数据库中

因此,您可以简单地调用save方法


如果您将ebean与Play框架一起使用,您还可以通过更新来更新您的模型。

如果有人感兴趣,下面是我最后要做的。小型实用程序方法,使用java反射从同一类的其他java对象更新java对象:

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public <T> void updateObjFromObj(T objToUpdate, T objToUse)
        throws IllegalAccessException {
    Class<?> clazz = objToUpdate.getClass();

    while (clazz != null) {
        Field[] fields = clazz.getDeclaredFields();

        for (Field field : fields) {
            if (!Modifier.isStatic(field.getModifiers())) {
                boolean accessible = field.isAccessible();
                field.setAccessible(true);
                if (field.get(objToUse) != null) {
                    field.set(objToUpdate, field.get(objToUse));
                }
                field.setAccessible(accessible);
            }
        }

        clazz = clazz.getSuperclass();
    }
}
编辑/更新:如果您使用它来更新ebean对象,您需要使用setter和getter将更改持久化到DB中

因此,您可以将其添加到字段循环之前:

PropertyAccessor objToUpdateAccessor = PropertyAccessorFactory.forBeanPropertyAccess(objToUpdate);
而不是:

field.set(objToUpdate, field.get(objToUse));
使用:


我将编辑我的问题以使其更清晰。我知道如何保存和更新对象,我想要的是使用来自Json对象或同一类java对象的直接数据来更新它。
PropertyAccessor objToUpdateAccessor = PropertyAccessorFactory.forBeanPropertyAccess(objToUpdate);
field.set(objToUpdate, field.get(objToUse));
objToUpdateAccessor.setPropertyValue(field.getName(), field.get(objToUse));