gpt4 book ai didi

JPA - 仅对给定查询强制延迟加载

转载 作者:行者123 更新时间:2023-12-04 16:00:14 24 4
gpt4 key购买 nike

我如何仅针对给定的 NamedQuery 强制执行延迟加载策略。

例如。考虑下面的伪代码(只是为了解释情况)
我有实体

@Entity
class Xyz {
int a;
int b;

@Fetch = EAGER
Set<ABC> listOfItems;
}

在这种情况下,我们已经声明 listOfItems 是 EAGERLY 获取的。

现在假设,我有一个 NamedQuery (query="getXyz" , name="select x from Xyz x where a=?")对于这个查询,我只需要结果是惰性的,即我不希望检索 listOfItems。

我可以通过哪些方式实现它们?
附:
1.我不想将实体类中的listOfItems改为Lazy
2. 我不想在查询中选择特定字段,如 name="select a,b from Xyz z where a = ? "
预先感谢您的建议

最佳答案

如果您不想获取 Set你必须急切地将其定义为懒惰。但是请注意,当您指定lazy 时,允许实现急切地获取。

引用规范:

public enum FetchType extends java.lang.Enum

Defines strategies for fetching data from the database. The EAGER strategy is a requirement on the persistence provider runtime that data must be eagerly fetched. The LAZY strategy is a hint to the persistence provider runtime that data should be fetched lazily when it is first accessed. The implementation is permitted to eagerly fetch data for which the LAZY strategy hint has been specified.



但是,如果您不想获取这样的 Set作为替代方案,我会创建一个小类来满足您的需求:
@Entity
@Table(name = "XYZ")
public class XyzStub
{
int a;
int b;
}

您可以使用 TypedQuery 对此进行查询:
EntityManager em;
//....
TypedQuery<XyzStub> q = em.createNamedQuery("select x from XyzStub x where x.a = :a", XyzStub.class)
q.setParameter("a", a);

关于JPA - 仅对给定查询强制延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10960363/

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