我正在使用 Hibernate 4.1 和 Spring 3.1。
考虑以下 User 类具有对包括 self 在内的其他对象的引用。我定义的所有休眠映射都是 LAZY 的,所以只有当我在 jsp 或其他代码中使用它们时才会加载引用对象。
class User {
private User createdBy;
private Department department;
private Project project;
.....
.....
}
问题是当我想返回一个 JSON 表示时,它使用反射来完成它并在那里进行深度序列化。下面是我的控制器代码。
@ResponseBody
public User getUser(int id) {
User user = [fetch user from service];
return user;
}
因为我也有自我参考,所以它进入了无限循环。
解决这个问题的解决方案是什么?我知道我需要在返回 UserDTO 的地方使用 DTO 模式,但我创建了多少这样的方法。例如,在一个地方我只需要基本的用户属性,在另一个地方我需要用户及其部门,在另一个地方我需要用户与部门和项目。
我需要公开多少这样的方法。有没有其他方法可以解决这个问题?