Spring未能延迟初始化集合-rest api
尝试从RESTAPI获取响应时出错。错误是Spring未能延迟初始化集合-rest api,spring,hibernate,rest,jpa,Spring,Hibernate,Rest,Jpa,尝试从RESTAPI获取响应时出错。错误是 "message": "Could not write JSON: failed to lazily initialize a collection of role: pl.bmstefanski.some_package.entity.impl.GuildEntityImpl.regions, could not initialize proxy - no Session; nested exception is com.fasterxml.jack
"message": "Could not write JSON: failed to lazily initialize a collection of role: pl.bmstefanski.some_package.entity.impl.GuildEntityImpl.regions, could not initialize proxy - no Session; nested exception is com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: pl.bmstefanski.some_package.entity.impl.GuildEntityImpl.regions, could not initialize proxy - no Session (through reference chain: java.util.Collections$UnmodifiableRandomAccessList[0]->pl.bmstefanski.some_package.entity.impl.GuildEntityImpl[\"regions\"])"
有针对性的收集:
@ElementCollection(targetClass = String.class)
@Column(columnDefinition = "TEXT", nullable = false)
private List<String> regions;
@ElementCollection(targetClass=String.class)
@列(columnDefinition=“TEXT”,null=false)
私人名单区域;
你知道为什么jackson不能将这个集合映射到json格式吗?试试看:它可能会解决这个问题,如果没有,你可以点击下面的链接,找到更多的解决方案 @ElementCollection(targetClass=String.class) @列(columnDefinition=“TEXT”,null=false) @杰索尼奥雷 私人名单区域 已解决。 我只需要添加自定义转换器列表->字符串,如下所示: @转换器
public class StringListConverter implements AttributeConverter<List<String>, String> {
@Override
public String convertToDatabaseColumn(List<String> list) {
return String.join(",", list);
}
@Override
public List<String> convertToEntityAttribute(String joined) {
return new ArrayList<>(Arrays.asList(joined.split(",")));
}
}
公共类StringListConverter实现AttributeConverter{
@凌驾
公共字符串convertToDatabaseColumn(列表){
返回字符串。join(“,”列表);
}
@凌驾
公共列表convertToEntityAttribute(字符串连接){
返回新的ArrayList(Arrays.asList(joined.split(“,”));
}
}
然后用
@Convert(converter = StringListConverter.class)
@Column(columnDefinition = "TEXT", nullable = false)
private List<String> regions;
@Convert(converter=StringListConverter.class)
@列(columnDefinition=“TEXT”,null=false)
私人名单区域;
来源:我不能忽略它,这是我api的主要功能。您是否使用了@Transactional Annotation?我认为这不是问题的原因。但在回答您的问题时,我使用的是spring数据存储库,因此我不必添加
@Transactional
注释。错误与以下事实有关:您有代理对象,并且您在hibernate会话之外,因此无法对其进行编组/解编。您可以在此处查看