我将Hibernate 3与MySQL数据库一起使用(我尝试了Hibernate 4,但没有成功)。我已经实现了每个具体类的表继承策略(union子类)。
除了多态查询之外,它还生成作业。
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来改变这种行为吗?
谢谢
是的。

最佳答案

我曾经遇到过一个类似的性能问题,但我发现唯一的解决方案是(至少在那时)将实现切换到"Table per class hierarchy",这将提供更好的性能,因为它不需要联合或联接。这并不是一个简洁的模式,但是如果你只有几个子类的话可能是一个很好的选择。

07-28 02:48