3

我正在使用带有 MySQL 数据库的 Hibernate 3(我尝试使用 Hibernate 4,但没有更多成功)。我已经实现了一个 table-per-concrete-class 继承策略(联合子类)。

除了多态查询之外,它完成了这项工作。Hibernate 生成一个基于 UNION 的查询,其中“where”子句位于高级查询中:

select primKey, param1, param2 from (
    select primKey, param1, param2 from Concrete1
    union
    select primKey, param1, param2 from Concrete2
)
where primKey == <value>
order by param1
limit 100

当加载整个具体表内容时,这会导致性能非常差,而因为 pkey 是抽象父级的属性,所以可以在子选择中定义“where”子句。

所以目标是让 Hibernate 生成这种查询:

select primKey, param1, param2 from (
    select primKey, param1, param2 from Concrete1 where primKey == <value>
    union
    select primKey, param1, param2 from Concrete2 where primKey == <value>
)
order by param1
limit 100

这样,查询会立即执行。

知道如何配置 Hibernate 来改变这种行为吗?

谢谢

Y。

4

1 回答 1

0

我曾经为类似的性能问题而苦苦挣扎,但发现唯一的解决方案是(至少在当时)将实现切换到“每个类层次结构的表”,因为它不需要联合或连接,所以性能要好得多。它不是那么简洁的模式,但如果你只有几个子类可能是一个不错的选择。

于 2013-05-09T19:31:30.703 回答