gpt4 book ai didi

java - 带有 Spring REST 服务的 LazyInitializationException

转载 作者:行者123 更新时间:2023-11-30 09:15:25 25 4
gpt4 key购买 nike

我有一个结合了 Hibernate 的 Spring 应用程序来编写一些我可以使用的服务。我没有 View ,因为这些是来自发送和获取 JSON 结果的手机的服务调用。

所以我有一个 Controller它处理 REST 调用:

@Controller
@RequestMapping(value = "/test")
public class TestController {
@Autowired
private TestService testService;


@RequestMapping(value = "/", method = RequestMethod.PUT)
public ResponseEntity<Map<String, Object>> testMethod(
@RequestHeader("userid") Integer userid, …) {
User user = testService.getUserById(userid);
List<Phone> phones = user.getPhones();
phones.add(…);

}
}

如果我尝试访问 Phones , 我得到一个 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.example.pojo.User.phones, no session or session was closed .

我有两个 POJO 类 UserPhone以这种方式注释,所以 User是这个一对多关系的所有者:

@OneToMany(cascade = { CascadeType.ALL })
@JoinColumn(name = "USER_ID")
private List<Phone> phones;

@ManyToOne
@JoinColumn(name = "USER_ID", insertable = false, updatable = false, nullable = false)
private User user;

我的结构是 Service -> ServiceImplementation 和 Dao -> DaoImplementation。

ServiceImplementation 方法 getUserById(userid)注释为@Transactional .

我该如何解决这个问题?我知道,在此服务 REST 调用中,我总是需要获取电话列表。我读了……关于 OpenSessionInView,但它似乎是使用 View 的模式,我没有。

放一个 Hibernate.initialize(user.getPhones());List<Phone> phones = user.getPhones(); 前不起作用。

我知道这是一个常见问题,但我不知道如何解决。

最佳答案

基于此:

LazyInitializationException Within a @Transactional Method

设置注解驱动的事务:

<tx:annotation-driven />

然后注释你的方法@Transactional

只要您在同一事务中获取用户并访问他们的电话列表,就可以使用惰性提取。即,只有在响应中需要时才获取电话列表。

关于java - 带有 Spring REST 服务的 LazyInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19906707/

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