首页 > 解决方案 > 如何使用 Hibernate 正确获取嵌套的惰性集合

问题描述

@PostConstruct方法中,我获取与集合之一连接的父实体并使用 初始化其余实体Hibernate.initialize(obj),但其中一些具有我也需要获取的关系。

Person person = /** SELECT Person JOINING WITH ADDRESS, CITY AND THE REST **/
Hibernate.initialize(person.getEmails());

现在我必须初始化 Collection @OneToMany Phones(),但在 Phones() 中我有 PhoneType 实体:

@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "tipo_id", nullable = false)
private PhoneType type;

如果我只是 Hibernate.initialize(person.phones()),则不会加载类型。

我在其他主题中找到了一个“解决方案”:https ://stackoverflow.com/a/47611257/8107849

即初始化phones() 和forEach allphone() 初始化类型,像这样:

Hibernate.initialize(person.getPhones());
person.getPhones().forEach(phone -> Hibernate.initialize(phone.getType()));

但是分析查询时,它给了我一个 getPhones() 查询和一个针对不同 Type() 的查询。就我而言,有五个查询。

有没有办法通过一个查询来获取这种情况?

提前致谢

标签: performancehibernate

解决方案


推荐阅读