作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Hibernate 3 和 MySQL 数据库(我尝试使用 Hibernate 4 但没有成功)。我已经实现了一个表每个具体类的继承策略(联合子类)。
除了多态查询,它可以完成工作。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"这提供了更好的性能,因为它不需要联合或连接。它不是那么简洁的模式明智,但如果你只有几个子类可能是一个很好的选择。
关于mysql - Hibernate继承性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11205550/
我是一名优秀的程序员,十分优秀!