gpt4 book ai didi

json - 无法初始化代理 - 无 session

转载 作者:行者123 更新时间:2023-12-02 18:08:51 27 4
gpt4 key购买 nike

大家好,我花了相当多的时间在 Googlin 上从 JSON 1 升级到 JSON 2,但是当我尝试返回实体列表时,出现了异常:

“收到异常无法写入 JSON:无法初始化代理 - 无 session (通过引用链:”

我知道这与 Hibernate 延迟初始化有关,但我还没有弄清楚如何修复它。我认为 jackson-module-hibernate 项目就是解决方案。但是我没能让它发挥作用。

这是我的技术:

  • Spring :3.2.1发布
  • Hibernate 4.1.7.Final
  • jackson 2
  • jackson 核心2.0.4
  • jackson 数据绑定(bind):2.0.4
  • jackson 数据类型-hibernate4:2.1.2

我正在使用 Java 配置: ...

@Bean
public com.mycompany.config.MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setObjectMapper(new HibernateAwareObjectMapper());
return mappingJackson2HttpMessageConverter;
}

@Bean
public OpenEntityManagerInViewFilter springOpenEntityManagerInViewFilter() {
return new org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter();
}

@Bean
public ContentNegotiatingViewResolver contentNegotiatingViewResolver() {
final ContentNegotiatingViewResolver contentNegotiatingViewResolver = new ContentNegotiatingViewResolver();
contentNegotiatingViewResolver.setDefaultContentType(MediaType.APPLICATION_JSON);
final ArrayList defaultViews = new ArrayList();
defaultViews.add(converter());
contentNegotiatingViewResolver.setDefaultViews(defaultViews);
return contentNegotiatingViewResolver;
}

我还有:

public class HibernateAwareObjectMapper extends ObjectMapper {

public HibernateAwareObjectMapper() {
Hibernate4Module hm = new Hibernate4Module();
registerModule(hm);
}
}

流程从 Controller 开始, Controller 调用多个服务,每个服务返回一个实体或列表。然后,我将返回的对象放入一个对象中并返回它,认为 @ResponseBody 会起作用。但是,我不能将所有东西连接正确,因为我仍然遇到异常。

任何人都可以看到这里有任何错误吗?

非常感谢...

最佳答案

此问题已在 jackson-datatype-hibernate 2.5.0 版本中得到解决。只需在 Hibernate(3,4)Module 中传递 Hibernate SessionFactory 即可,如下所示:

public class HibernateAwareObjectMapper extends ObjectMapper {

private static final long serialVersionUID = 1L;

@Autowired
private EntityManagerFactory emf;

@PostConstruct
public void init() {
Hibernate4Module module = new Hibernate4Module(emf.unwrap(SessionFactory.class));

module.enable(Hibernate4Module.Feature.FORCE_LAZY_LOADING);
module.disable(Hibernate4Module.Feature.USE_TRANSIENT_ANNOTATION);
}}

如果正在使用 JPA,则上面的代码片段很好,因此 EntityManagerFactory bean 可用。否则,只需注入(inject) Hibernate SessionFactory 并传递给构造函数。

无需使用 OpenSessionInView 模式。

关于json - 无法初始化代理 - 无 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15424521/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com