如何使用Hibernate正确获取嵌套的Lazy Collections

时间:2018-05-09 20:48:09

标签: performance 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所有phone()初始化类型,如下所示:

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

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

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

提前致谢

0 个答案:

没有答案