gpt4 book ai didi

java - 尽管延迟初始化还是热切加载?

转载 作者:行者123 更新时间:2023-11-30 03:12:36 27 4
gpt4 key购买 nike

我们有一个实体,它有很多 ManyToOne、OneToOne 等关系,它们本身也有一些关系。例如

@OneToMany(targetEntity = Season.class, cascade = {
CascadeType.ALL
})
@JoinColumn(name = "SEASON_ID")
public List<Season> getSeasons(){...}

(我无法改变这一点)。

这些都是延迟加载的(我认为默认情况下),这很好,我们不想改变这一点。现在我们有这样一种情况,我们希望通过它的 id 急切地找到整个实体并返回它。

我发现了很多更改实体的建议以及关于急切加载还是延迟加载更好的讨论,但目前这些对我没有帮助,因为该实体对我们来说是遥不可及的。有没有办法做到这一点,无需更改实体,也不必调用每个可能的 getter 来初始化惰性实体(因为这些实体太多了)?例如,Question 24573877 的答案对我不起作用。

基本上我想说“急切地加载实体,但仅此一次”。目前我只是做 return em.find(MyEntity.class,contractId) (我可以更改它)。

感谢和问候Urr4

最佳答案

看看:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html

章节:14.3。协会和加入

A "fetch" join allows associations or collections of values to be initialized along with their parent objects using a single select. This is particularly useful in the case of a collection. It effectively overrides the outer join and lazy declarations of the mapping file for associations and collections. See Section 19.1, “Fetching strategies” for more information.

您必须编写查询而不是使用 em.find。

例如此查询:

from Cat as cat inner join fetch cat.mate left join fetch cat.kittens

将返回已加载伴侣和小猫的猫(渴望),即使它们已在惰性中初始化

编辑:或者您可以使用 fetch profile :

In order to mitigate these, Hibernate propose a fetch strategy that works not on the mapping level, but on the request level. Thus, you can still have lazy loading mappings but eager fetching in some cases.

看看:https://blog.frankel.ch/hibernate-hard-facts-part-6

关于java - 尽管延迟初始化还是热切加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305505/

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