无法初始化代理 - @ManyToMany关系中没有会话

时间:2018-02-27 09:27:55

标签: hibernate jpa spring-data spring-data-jpa hibernate-mapping

我有一个名为User with this property

的域对象
 @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);
            }
    }

1 个答案:

答案 0 :(得分:0)

  

但我不知道如何添加新酒店以避免此错误

当您尝试添加新酒店时,您也尝试向数据库创建新事务,因此您需要打开一个会话以便进行交易。

我看到您正在使用Spring,因此您可以在此处添加@transactionalannotation到您尝试添加新收藏的酒店的方法。

@Transactional
public void addNewHotel(Hotel hotel){
   Hibernate.initialize(loggedInUser().getFavoriteHotels());
   loggedInUser().getFavoriteHotels().add(hotel);
}