【问题标题】:How to reinitialize lazy loaded entity?如何重新初始化延迟加载的实体?
【发布时间】:2011-09-16 11:23:50
【问题描述】:

我有一个实体人:

class Person {
  String name;
  String phone;
  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  Set<Address> addresses = new HashSet<Address>();
}

当我在桌子上显示人员时,我不想加载地址。 当我打开编辑对话框时,我也想显示地址。但是我遇到了 Lazzy 加载异常(没有活动会话)。

如何重新初始化 Person 实例以加载地址?

【问题讨论】:

    标签: hibernate lazy-loading vaadin


    【解决方案1】:

    调用另一种方法,该方法将从数据库中重新加载人员及其地址:

    public Person loadPersonWithAddresses(Long personId) {
        Person p = (Person) getSession().get(Person.class, personId);
        Hibernate.initialize(p.getAddresses());
        return p;
    }
    

    public Person loadPersonWithAddresses(Long personId) {
        String hql = "select distinct p from Person p"
                     + " left join fetch p.addresses"
                     + " where p.d = :id";
        return (Person) getSession().createQuery(hql)
                                    .setLong("id", personId)
                                    .uniqueResult();
    }
    

    在单个查询中完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      相关资源
      最近更新 更多