如何使用Hibernate深入获取实体的多个级别

时间:2019-03-25 17:25:01

标签: performance hibernate fetch lazy-initialization

我正在尝试通过在单个查询中获取深层关联来减少查询,从而优化代码。

我四处张望,发现本指南other methods的问题是我找不到作者所指的关于EntityGraphBuilder的任何东西。

User.java中的字段

@OneToMany(cascade = CascadeType.ALL, mappedBy = "user", fetch = FetchType.LAZY)
    private Set<Reply> replies = new HashSet<>();

Rating.java中的字段

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "article")
    private Article article;

UsersDao.java(要优化的代码)

// Gets user result fully initialize from previous method
public void fetchComplete(User result) {

        for (Rating r : ratings) {
            if (r != null && r.getArticle().getWriter() != null) {
                Hibernate.initialize(r.getArticle().getWriter());
                Hibernate.initialize(r.getArticle().getKeywords());
                Hibernate.initialize(r.getArticle().getRating());
                writers.add(r.getArticle().getWriter());
            }
        }
}

如上面的代码所示,此方法将执行大量查询,从而显着降低性能,因此必须有一种无需太多查询即可延迟初始化这些字段的方法。

期待您的答复。

0 个答案:

没有答案