经过一番研究,我发现了很多关于如何编写简单有效的代码(使用 JPQL)的材料:
但是当涉及到将两者结合起来时 - 如何以有效和干净的方式做到这一点就变得不清楚了。
要么是预先获取有效,要么在内存中应用分页(又名HHH000104:使用集合获取指定的 firstResult/maxResults;在内存中应用!)
要么是分页有效,但急切提取不起作用(即使resultSet
实际包含相关实体),导致对数据库的额外查询以批量提取每一行的相关实体。
最接近的,实际上有效的是 https://vladmihalcea.com/fix-hibernate-hhh000104-entity-fetch-pagination-warning-message/
但这让我想知道是否有更直观、更干净的解决方案?
问题:关于如何使用分页和相关实体的急切获取,还有其他最佳实践吗?
注意:解决方案还应提供一种将过滤器应用于从数据库中检索的数据的方法。(例如JPQL WHERE 子句)
由于未知原因,我无法从Intellij IDEA 评估表达式窗口获得currentThread().isInterrupted() 的正确值。
这是一个小代码片段,可以帮助您重现相同的行为:
public class IsInterruptedTest {
public static void main(String[] args) {
Thread.currentThread().interrupt();
System.out.println(Thread.currentThread().isInterrupted());
}
}
Run Code Online (Sandbox Code Playgroud)
要重现它,请执行以下步骤:
System.out.println(Thread.currentThread().isInterrupted());
在调试模式下启动 main 方法
等到执行到达断点。
Thread.currentThread().isInterrupted();
从“评估表达式”窗口调用(Alt + F8)。(对我来说,这个调用返回false值)
恢复程序执行,一旦完成 - 检查控制台中打印的值。(对我来说true就在这里打印)
所以,我的问题是 - 为什么这两个值不同?
这是由于当前线程被调试器挂起而发生的吗?如果是这样,有什么方法可以isInterrupted()
从IDE的“评估表达式”窗口中获取正确的调用值?