问题描述
我正在使用杰克逊作为json反序列化器来构建Quarkus后端。 我基本上可以使用以下实体将这种情况简化为该示例:
@Data
@Entity
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OnetoMany(cascade = CascadeType.ALL,orphanRemoval = true)
@JoinColumn(name = "parentId")
private List<Child> children;
}
和
@Data
@Entity
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "petId")
private Pet pet;
}
和
@Data
@Entity
public class Pet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
实际上,问题要复杂得多,但这可以解释我的想法是问题的根源。 问题是菱形关系。假设一位父母有两个孩子,而且他们都有相同的宠物。 当我现在将父级作为json传递时,
{
"id": 2,"name": "Parent","childList": [
{
"id": 3,"name": "Child1","pet": {
"id": 3,"name": "Pet"
}
},{
"id": 4,"name": "Child2","name": "Pet"
}
}
]
}
Jackson无法识别这两个宠物是同一个对象,equals
提供的@Data
函数也应该这样说-我已经手工覆盖了它,只是检查了名称和即使如此,它也不适用。
当我尝试合并父实体时,这似乎会导致问题,因为它会引发IllegalStateException: Multiple representations of the same entity
异常。
我知道如果我重新构建数据结构可能会解决此问题,但是由于它是第三方,所以我没有选择。
有没有办法告诉杰克逊在反序列化时识别相等的对象?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)