我如何为给定的NamedQuery强制执行延迟加载策略.
例如.考虑下面的伪代码(只是为了解释这个案例)我有一个实体
@Entity
class Xyz {
int a;
int b;
@Fetch = EAGER
Set<ABC> listOfItems;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们声明listOfItems被EAGERLY获取.
现在假设,我有一个NamedQuery (query="getXyz" , name="select x from Xyz x where a=?")
对于这个查询,我只需要结果是懒惰的,即我不希望检索listOfItems.
我有什么方法可以实现它们?ps:1.我不想在实体类2中将listOfItems更改为Lazy.我不想在查询中选择特定字段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;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 TypedQuery 进行查询:
EntityManager em;
//....
TypedQuery<XyzStub> q = em.createNamedQuery("select x from XyzStub x where x.a = :a", XyzStub.class)
q.setParameter("a", a);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7688 次 |
| 最近记录: |