gpt4 book ai didi

java - 我该如何解决这个 Hibernate 限制?

转载 作者:行者123 更新时间:2023-11-29 06:09:21 25 4
gpt4 key购买 nike

我在这样的层次结构中有 3 个实体:

         MyInterface
|
-----------------
| |
Entity1 Entity2

MyInterface 没有映射到 Hibernate 中(因为我使用 implicit polymorphism strategy 来映射这个继承)

而且,事实上,如果我启动这样的查询:

"FROM MyInterface"

它工作得很好(因为它检索了 Entity1 的所有实例和 Entity2 的所有实例,将它们放在一起,并返回一个 List<MyInterface> )。

如果我们查看 Hibernate 生成的 SQL,它会启动 2 个独立的 SQL 查询,首先检索 Entity1 实例,另一个查询检索 Entity2 实例,但我对此没有意见。

当你尝试做这样的事情时,大问题就来了:

"FROM MyInterface ORDER BY someField"

因为它将 ORDER BY 应用于第一个 SQL 查询,然后将相同的 ORDER BY 应用于第二个 SQL 查询,而不是将它们应用于WHOLE 查询(我知道这一点是因为我可以看到Hibernate 启动的 native SQL 查询)。

这显然是 Hibernate 的错误行为。

我如何解决这个问题以强制 Hibernate 将 ORDER BY 应用于整个查询? (我不能在内存中这样做,因为稍后我还必须添加分页)。

最佳答案

我会说问题在于 Hibernate 必须创建这 2 个 SQL 查询,因为您必须从 2 个表中读取数据。

我不确定在一个查询中是否可以从 2 个表中读取并按 2 列(每个表中的一个)进行排序(意味着没有供应商特定的扩展),如果不能,Hibernate 将不得不执行无论如何在内存中排序。

应用分页时您可以做的是:读取您想要排序的 ID 和值(而不是整个实体),然后在内存中排序并读取页面中包含的所有 ID 的整个实体。为了使分页保持一致,您可能必须存储初始查询的结果(id + 订单条件)。

关于java - 我该如何解决这个 Hibernate 限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7482129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com