如何重新初始化延迟加载实体?

发布于 2024-12-04 16:21:23 字数 318 浏览 1 评论 0原文

我有一个实体“人”:

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

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

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

I have an entity Person:

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

When I display persons at table I don't want to load addresses.
When I open edit dialog, I want to display addresses too. But I got Lazzy loading exception (there is no active session).

How can I reinitialize Person instance to load addresses?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

入怼 2024-12-11 16:21:23

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

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();
}

在单个查询中执行此操作。

Call another method which will reload the person from database along with his addresses:

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

or

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();
}

to do it in a single query.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文