我有一个结合 Hibernate 的 Spring 应用程序来编写一些我可以使用的服务。我没有视图,因为这些是来自手机的服务调用,它发送和获取 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 类User
并Phone
以这种方式注释,所以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,但它似乎是一种使用视图的模式,我没有。
把 aHibernate.initialize(user.getPhones());
放在前面是List<Phone> phones = user.getPhones();
行不通的。
我知道这是一个常见问题,但我不知道如何解决我的情况。