[英]Spring Data REST + Hibernate 5 + Jackson LAZY serialization fail
[英]Hibernate and Jackson lazy serialization
我正在研究一个使用Hibernate和Jackson来序列化我的对象的项目。 我想我理解它是如何被工作的,但我无法使其成功。
如果我理解得很清楚,一旦关系获取模式设置为LAZY,如果你想要这种关系,你必须初始化它。
这是我的班级:
@Entity
@JsonIgnoreProperties(ignoreUnknown = true)
@Table(schema="MDDI_ADMIN", name = "MINIUSINE")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class MiniUsine {
@Id
@Column(name="MINIUSINEID", nullable = false)
private int miniUsineID;
@Column(name = "NAME", length = 40, nullable = false)
private String name;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="FluxID")
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private Set<Flux> fluxs = new HashSet<Flux>();
所有的吸气者和安装者。
我也尝试过这个JsonInclude.Include.NON_EMPTY
作为类注释。 还尝试了NON_NULL。 然而,杰克逊一直在送我
com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: MiniUsine.fluxs, no session or session was closed (through reference chain: java.util.ArrayList[0]->MiniUsine["fluxs"])
我用它来序列化: mapper.writeValueAsString(optMU);
使用Jackson 2.3.2
感谢帮助
据我所知,hibernate返回的实体对象是一个派生自您的实体类的代理。 如果您尝试访问事务之外的惰性字段的getter方法,则会出现LazyInitializationException。 我想说的是将通量设置为空集对你没有任何帮助。
private Set<Flux> fluxs = new HashSet<Flux>();
Hibernate会重载getter,如果您尝试在事务之外访问它(jackson正在检查它是否为空),则会出现LazyInit错误。
我知道这是一个老问题,但我遇到了同样的问题。
您必须添加新的maven依赖以支持Hibernate的JSON序列化和反序列化。 我使用了Hibernate5所以我添加了
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>2.9.2</version>
</dependency>
现在注册新模块。
@Provider
public class JacksonHibernateProvider implements ContextResolver<ObjectMapper> {
@Override
public ObjectMapper getContext(final Class<?> type) {
final ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new Hibernate5Module());
return mapper;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.