【发布时间】:2012-06-27 15:58:33
【问题描述】:
我正在使用带有 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 来改变这种行为吗?
谢谢
是的。
【问题讨论】:
-
不确定休眠但为什么不使用存储过程,假设输入参数 primKey 和 limit;甚至是一个视图(优化视图 - 索引等)——该视图将包含联合 Croncrete1 和 Concrete2 表,并将从 mView 中选择 [cols] where primKey = value order by [cols] limit ?,?.
标签: mysql performance hibernate inheritance union-subclass