无法初始化代理 - @ManyToMany 关系中没有 Session
could not initialize proxy - no Session in @ManyToMany relationship
我有一个名为 User 的域 object 属性
@ManyToMany
@JoinTable(
name="t_user_fav_hotel",
joinColumns=@JoinColumn(name="user_id", referencedColumnName="id"),
inverseJoinColumns=@JoinColumn(name="hotel_id", referencedColumnName="id"))
private Set<hotel> favoriteHotels = new HashSet<>();
我在服务级别创建了一个方法来获取所有收藏夹并避免错误无法初始化代理并且它工作正常。
userService.getFavorites (loggedInUser());
但是我不知道如何添加一个新酒店来避免这个错误:
Hibernate.initialize(loggedInUser().getFavoriteHotels());
loggedInUser().getFavoriteHotels().add(hotel);
我在用户服务级别中也添加了同样的结果
@Transactional
public void addFavorite (User user, Hotel hotel) {
Hibernate.initialize(user.getFavoriteHotels());
if (!user.getFavoriteHotels().contains(hotel)) {
user.getFavoriteHotels().add(hotel);
userRepository.save(user);
}
}
But I don't know how to add a new Hotel avoiding this error
当您尝试添加新酒店时,您也在尝试对数据库进行新交易,因此您需要打开会话才能进行此交易。
我看到您正在使用 Spring,所以您在这里可以做的是在您尝试添加新的最喜欢的酒店的方法中添加一个 @transactional
annotation。
@Transactional
public void addNewHotel(Hotel hotel){
Hibernate.initialize(loggedInUser().getFavoriteHotels());
loggedInUser().getFavoriteHotels().add(hotel);
}
我有一个名为 User 的域 object 属性
@ManyToMany
@JoinTable(
name="t_user_fav_hotel",
joinColumns=@JoinColumn(name="user_id", referencedColumnName="id"),
inverseJoinColumns=@JoinColumn(name="hotel_id", referencedColumnName="id"))
private Set<hotel> favoriteHotels = new HashSet<>();
我在服务级别创建了一个方法来获取所有收藏夹并避免错误无法初始化代理并且它工作正常。
userService.getFavorites (loggedInUser());
但是我不知道如何添加一个新酒店来避免这个错误:
Hibernate.initialize(loggedInUser().getFavoriteHotels());
loggedInUser().getFavoriteHotels().add(hotel);
我在用户服务级别中也添加了同样的结果
@Transactional
public void addFavorite (User user, Hotel hotel) {
Hibernate.initialize(user.getFavoriteHotels());
if (!user.getFavoriteHotels().contains(hotel)) {
user.getFavoriteHotels().add(hotel);
userRepository.save(user);
}
}
But I don't know how to add a new Hotel avoiding this error
当您尝试添加新酒店时,您也在尝试对数据库进行新交易,因此您需要打开会话才能进行此交易。
我看到您正在使用 Spring,所以您在这里可以做的是在您尝试添加新的最喜欢的酒店的方法中添加一个 @transactional
annotation。
@Transactional
public void addNewHotel(Hotel hotel){
Hibernate.initialize(loggedInUser().getFavoriteHotels());
loggedInUser().getFavoriteHotels().add(hotel);
}