首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Jackson和Hibernate序列化和反序列化Set属性

如何使用Jackson和Hibernate序列化和反序列化Set属性
EN

Stack Overflow用户
提问于 2016-11-23 19:49:53
回答 1查看 3.5K关注 0票数 1

我使用Hibernate保存了两个简单的POJO模型,并使用Jackson将对象序列化和反序列化为JSON。

下面是我的模型TestCar和TestPart:

代码语言:javascript
复制
public class TestCar
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id; 

    private String name;

    @OneToMany(targetEntity = TestPart.class, mappedBy = "car", cascade = { CascadeType.PERSIST }, orphanRemoval=true, fetch = FetchType.LAZY)
    private Set<TestPart> parts = new HashSet<>();
}

public class TestPart
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id; 

    private String name;

    @JsonIgnore
    @ManyToOne
    private TestCar car;
}

我的杰克逊初始化:

代码语言:javascript
复制
Hibernate4Module h4m = new Hibernate4Module();
h4m.enable(Hibernate4Module.Feature.FORCE_LAZY_LOADING);

mapper = new ObjectMapper();
mapper.registerModule(h4m);
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.enableDefaultTyping();

private Set<TestPart> pars有一个问题,因为它被序列化为org.hibernate.collection.internal.PersistentSet

代码语言:javascript
复制
{
    "id" : 1,
    "name" : "Fiat",
    "parts" : [ "org.hibernate.collection.internal.PersistentSet", [ [ "com.acme.TestPart", {
            "id" : 1,
            "name" : "puerta"
      } ]
     ] ]
}

当我试图反序列化它时,会引发一个错误:

代码语言:javascript
复制
Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection, could not initialize proxy - no Session
at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:575)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:214)
at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:155)
at org.hibernate.collection.internal.PersistentSet.size(PersistentSet.java:160)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:308)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:259)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)
at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer._deserialize(AsArrayTypeDeserializer.java:116)
at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer.deserializeTypedFromArray(AsArrayTypeDeserializer.java:53)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserializeWithType(CollectionDeserializer.java:320)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:497)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:101)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:276)

是否有任何方法将hibernate PersistentSet序列化为一个简单的集合?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-24 00:14:10

您似乎没有使用安装了模块的ObjectMapper。也许您应该重新分配mapper变量?不确定ObjectMapper在多大程度上是可变的,或者是构建器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40773005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档