首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Hibernate继承性能

Hibernate继承性能
EN

Stack Overflow用户
提问于 2012-06-26 18:40:10
回答 1查看 871关注 0票数 3

我正在使用带有MySQL数据库的Hibernate 3(我尝试了Hibernate 4,但没有成功)。我已经实现了每个具体类的表继承策略(联合子类)。

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

代码语言:javascript
代码运行次数:0
运行
复制
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生成这样的查询:

代码语言:javascript
代码运行次数:0
运行
复制
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.

EN

回答 1

Stack Overflow用户

发布于 2013-05-10 03:31:31

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11205550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档