如何在特定条件下强制实施延迟加载

时间:2010-06-16 16:24:53

标签: hibernate orm jpa seam

我们有一个JPA @Entity类(比如User),它有一个使用EAGER选项加载的@ManyToOne引用(比如Address),后者依次以EAGER方式加载它自己的@ManyToOne字段(比如Country)。

我们使用EntityQuery界面根据搜索条件计算用户列表,在这样的加载过程中,所有已标记为EAGER的@ManyToOne字段都被加载。但是为了执行EntityQuery.resultCount(),我实际上不需要加载@ManyToOne字段。有没有办法防止在这种情况下加载EAGER字段,以便我们可以避免不必要的连接?

2 个答案:

答案 0 :(得分:4)

如果您只想获取行数 ,请使用COUNT聚合函数,而不是getResultCount()

否则,您可以将默认行为切换为延迟,并通过调用Hibernate.initialize(entity)加载项目。但这很乏味。

答案 1 :(得分:2)

如果您需要的只是记录数,为什么不使用aggregate functions(在您的情况下为COUNT)?