我有一个从休眠会话中提取的用户对象。User 对象有一组 Car 对象,我正在检索这些对象并将其转换为 JSON。问题是,当我返回要转换为 JSON 的 Set 时,它会进入一个无限循环的解析,这似乎是因为休眠会话仍然处于活动状态。
代码如下所示:
public Set<Car> getUserCurrentCar(User user) {
user = (User) session.get(User.class, user.getId());
Set<Car> retrievedCars = (Set<Car>) user.getCars();
session.close();
return retrievedCars;
}
但是,当我将对象值移动到没有会话的对象中时,一切都可以正常解析而不会出现错误:
public Set<Car> getUserCurrentCar(User user) {
user = (User) session.get(User.class, user.getId());
Set<Car> Cars = new HashSet<Car>();
Set<Car> retrievedCars = (Set<Car>) user.getCars();
for(Car Car :retrievedCars){
Car newCar = new Car();
newCar.setTitle(car.getTitle());
cars.add(newCar);
}
session.close();
return cars;
}
虽然这可行,但我想在将来修改我的对象并避免所有这些看似重复的对象转移。
此外,我的 Car 对象在休眠映射中具有对 User 的多对一反向引用:
<many-to-one name="user"
column="userId"
not-null="true"/>
如何避免这种情况,并使用真正分离的对象解析为 JSON?