【发布时间】:2016-03-18 13:53:39
【问题描述】:
当使用 Jackson 反序列化 JPA @Entity 时,我希望 Jackson 在托管实例上运行(如果存在),然后反序列化其上的所有属性;否则创建一个新的瞬态。
假设我在数据库中有一个Person:
+----+------+--------------+
| id | name | favoriteHero |
+----+------+--------------+
| 21 | John | NULL |
+----+------+--------------+
我想反序列化这个 JSON
{
"id": 21,
"favoriteHero": "Batman"
}
使用
Person john = objectMapper.readValue(jsonString, Person.class);
那么我需要 john 作为 JPA 托管实体,首先由 id 从持久性上下文中检索,然后将 favoriteHero 设置为 Batman,以便
john.getId() == 21;
john.getName() == "John";
john.getFavoriteHero() == "Batman";
有可能吗?
我尝试使用JsonDeserializer,但它会使用从数据库中检索到的实体,而不是继续设置值(如果在数据库中找不到,它不能回退到默认反序列化)。
【问题讨论】:
-
我无法使用
@JsonCreator,因为我无法将实体代码与数据库层混淆。
标签: java json hibernate jpa jackson