当来自不同实体类型的 ID 重叠时,是不是可以将 @JsonIdentityInfo 与 ObjectIdGenerators.PropertyGenerator 一起使用?
Posted
技术标签:
【中文标题】当来自不同实体类型的 ID 重叠时,是不是可以将 @JsonIdentityInfo 与 ObjectIdGenerators.PropertyGenerator 一起使用?【英文标题】:Is it possible to user @JsonIdentityInfo with ObjectIdGenerators.PropertyGenerator when the IDs from different entity types overlap?当来自不同实体类型的 ID 重叠时,是否可以将 @JsonIdentityInfo 与 ObjectIdGenerators.PropertyGenerator 一起使用? 【发布时间】:2014-02-28 07:23:12 【问题描述】:当来自不同实体类型的 ID 重叠时,是否可以将 @JsonIdentityInfo 与 ObjectIdGenerators.PropertyGenerator 一起使用?
假设我有以下 XML 并想用 Jackson 2.x 反序列化它:
<foo>
<id>3</id>
<name>Peter</name>
<bar>
<id>3</id>
<kind>dog</kind>
<!--belongsTo>3</belongsTo-->
</bar>
</foo>
我已经用 @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
注释了 Foo 和 Bar 类。
反序列化失败并显示com.fasterxml.jackson.databind.JsonMappingException: Already had POJO for id (java.lang.String) [3]
。
如果 bar 的 id 为 4,则一切正常。
Jackson 对 XML 中的 ID 进行反序列化有什么要求?我假设 - 因为杰克逊知道哪个实体范围,只要它属于不同的类型,它就可以使用相同的 id。
P.S.:是否设置了 belongsTo 引用(指向 foo 对象)似乎并不重要。
【问题讨论】:
【参考方案1】:您可能已经找到了答案,但万一您还没有……
您应该能够为此使用@JsonIdentityInfo 的scope 参数,即,
@JsonIdentityInfo(scope=Foo.class, property="id", generator=ObjectIdGenerators.PropertyGenerator.class)
public class Foo ...
和
@JsonIdentityInfo(scope=Bar.class, property="id", generator=ObjectIdGenerators.PropertyGenerator.class)
public class Bar ...
【讨论】:
它适用于 JSON 对象。 XML 对象呢?以上是关于当来自不同实体类型的 ID 重叠时,是不是可以将 @JsonIdentityInfo 与 ObjectIdGenerators.PropertyGenerator 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
对 Type-graphql 和 Typeorm 实体中的外键字段使用 ID 标量类型在语义上是不是正确?