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

标签 jpa

我如何仅针对给定的 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/

相关文章:

java - <mapped-superclass> 中的 JPA ORM.xml 映射文件无法将 <basic> 放在一起 <id > 或 <version >

java - @AdminPresentation在broadleafCommerce中有什么用

java - 无法使用 POSTMAN 删除(映射)我的数据库的对象

java - "Trying to return an unknown connection2! "警告消息的原因是什么

java - 使用可选参数更新查询

java - Openshift - EntityManager 没有持久性提供程序

java - 错误: Not an entity.但是@Entity和persistence.xml正确

java - 与 SINGLE_TABLE 继承的子类的关系

java - JPA 多对二关系

java - 连接数量比它可能多