【问题标题】:Refreshing the list after persist causes: failed to lazily initialize a collection, no session or session was closed持久化后刷新列表原因:懒惰初始化集合失败,没有会话或会话被关闭
【发布时间】:2015-02-24 17:51:21
【问题描述】:

在将我的酒店实体持久保存到后端 (mysql) 后,任何下一个前端客户端调用以刷新设备列表(酒店中的集合)都会遇到此错误(即使我将集合标记为急切地获取):

懒惰初始化集合失败,没有会话或会话 关闭了

前端的托管 bean(使用 JSF):

   public void save() {
        hotel.setHotelUser(loginBean.getLoggedInUser());
        hotel = hopAccess.persistHotel(hotel);
        addMessage("Hotel saved!");
    }

实体:

    @Entity
    @Table(name = "hotel")
    public class Hotel {

        @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
        @JoinTable(name = "con_hotel_equipment", joinColumns = {
                @JoinColumn(name = "id_hotel", nullable = false, updatable = false) },
                inverseJoinColumns = { @JoinColumn(name = "id_lookup",
                        nullable = false, updatable = false) })
        private Set<LookUp> equipments = new HashSet<LookUp>();

服务:

    @Override
@Transactional(value = "transactionManagerHop", propagation = Propagation.REQUIRES_NEW)
public Hotel persistHotel(Hotel hotel) {
    Hotel entity = emHop.merge(hotel);
    addToCache(entity);
    return entity;
}

【问题讨论】:

  • 这不是 JSF 问题。您可能正在尝试获取应该在 Hibernate 端延迟初始化的集合(此处为 wizzardBean.hotel.equipments)。使用FetchType.EAGER,这反过来又被严重劝阻,使用适当的 fetch join(s) 或使用一些供应商特定的配置(我个人不喜欢)。
  • 谢谢,但请检查我的代码 - 我已经急切地获取收藏。
  • 是的,但它可能潜伏在其他地方。答案将在抛出的完整异常堆栈跟踪中。
  • 尝试将属性collectionType="java.util.ArrayList"添加到selectCheckboxMenu
  • 这将导致映射问题,因为 hotel.equipments 是 Set 类型。

标签: hibernate jpa lazy-initialization


【解决方案1】:

实体很可能已从持久化上下文中分离出来,在刷新实体之前,您需要确保它已附加(例如,使用 entityManager.findById() 或等效项)

【讨论】:

  • 是的,我也一样。所以我尝试在坚持到数据库后重新加载实体。但这也没有用。同样的错误。
  • 你需要在刷新之前重新加载,你试过了吗?
  • 不,我在 hotel = hopAccess.persistHotel(hotel); 之后重新加载了酒店;
  • 这无济于事,因为在请求完成后实体正在分离......尝试在刷新之前以相同的方法重新加载
  • 顺便说一句:刷新只为这一个集合崩溃。如果我将此集合的 jsf 标签取出,一切正常 - 无论我将酒店保存到数据库多少次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 2014-11-02
  • 2011-03-31
  • 2021-06-15
  • 2016-11-10
相关资源
最近更新 更多