如何仅针对给定的 NamedQuery 实施延迟加载策略。
例如。考虑下面的伪代码(只是为了解释这种情况)
我有一个实体
@Entity
class Xyz {
int a;
int b;
@Fetch = EAGER
Set<ABC> listOfItems;
}
在本例中,我们已声明要急切获取 listOfItems。
现在假设,我有一个NamedQuery (query="getXyz" , name="select x from Xyz x where a=?")
对于此查询,我只需要惰性结果,即我不希望检索 listOfItems。
我可以通过哪些方式实现这些目标?
p.s:1.我不想将实体类中的项目列表更改为惰性 2.我不想在查询中选择特定字段,例如name="select a,b from Xyz z where a = ? "
预先感谢您的建议
如果你不想获取Set
急切地你必须将其定义为懒惰。但请注意,当您指定延迟时,允许实现急切地获取。
引用规范:
公共枚举 FetchType
扩展 java.lang.Enum
定义从数据库获取数据的策略。 EAGER 策略是对持久性提供程序运行时的要求,即必须急切地获取数据。 LAZY 策略是对持久性提供程序运行时的提示,即首次访问数据时应延迟获取数据。允许该实现急切地获取已指定 LAZY 策略提示的数据。
但是,如果您不想获取这样的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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)