gpt4 book ai didi

java - Hibernate 延迟加载 - 获取列表中的列表项

转载 作者:行者123 更新时间:2023-12-02 01:51:08 25 4
gpt4 key购买 nike

我目前正在我的 java 应用程序中试验 hibernate 5。我遇到以下问题:

我有两个 pojo/模型:

@Entity(name="Categories")
public class Category {
@javax.persistence.Id
private int Id;
private String Name;
@OneToMany(mappedBy = "category",cascade=CascadeType.ALL, fetch=FetchType.LAZY)
private List<Link> links = new ArrayList<>();
// ... getters and setters..
}
@Entity(name="Links")
public class Link {
@javax.persistence.Id
private int Id;
private String Name;
private String Url;
@ManyToOne
@JoinColumn(name="CategoryId")
private Category category;
// ... getters and setters..
}

现在我想获取其中包含链接的所有类别。我的方法如下:

public Iterable<Category> getCategories() {
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session = factory.getCurrentSession();
session.getTransaction().begin();

String hsql = "from " + Category.class.getName() + " e";

Query<Category> query = session.createQuery(hsql);
List<Category> cats = query.getResultList();

cats.forEach(item -> Hibernate.initialize(item.getLinks()));

session.getTransaction().commit();
return cats;
}

这是有效的,但我认为这是一个糟糕的解决方案,无法从所有类别获取所有链接。我已经尝试过“JOIN FETCH”。

例如,如果我使用:

String hsql =  "from " + Category.class.getName() + " e JOIN FETCH e.links l

我会两次得到所有结果...从我的列表的所有类别中获取列表“链接”中的所有项目的最佳做法是什么?

我希望这个问题不太容易,但我找不到任何对此有帮助的内容。

最佳答案

您可以使用fetch=FetchType.EAGER代替fetch=FetchType.LAZY,并且hibernate将直接在加载时解析所有链接。

如果您想使用它,取决于用例。对于小数据集来说,这绝对没问题。

关于java - Hibernate 延迟加载 - 获取列表中的列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57425645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com