【发布时间】:2010-03-17 17:40:47
【问题描述】:
我正在使用 Hibernate 3.2.7.GA 条件查询从 Oracle 企业版 10.2.0.4.0 数据库中选择行,并按时间戳字段进行过滤。有问题的字段在 Java 中是 java.util.Date 类型,在 Oracle 中是 DATE。
It turns out,该字段被映射到java.sql.Timestamp,Oracle 将所有行转换为TIMESTAMP,然后再与传入的值bypassing the index 进行比较,从而破坏性能。
一种解决方案是使用 Hibernate 的 sqlRestriction() 和 Oracle 的 TO_DATE 函数。这将修复性能,但需要重写应用程序代码(大量查询)。
那么有更优雅的解决方案吗?既然 Hibernate 已经做了类型映射,那么它可以被配置为做正确的事情吗?
更新:问题出现在多种配置中,但这里有一个具体示例:
- Oracle 企业版 10.2.0.4.0
- Oracle JDBC 驱动程序 11.1.0.7.0
- 休眠 3.2.7.GA
- Hibernate 的 Oracle10gDialect
- Java 1.6.0_16
【问题讨论】:
-
我认为这取决于您使用的驱动程序(版本)(请参阅opensource.atlassian.com/projects/hibernate/browse/HHH-1566 和您提供的链接),也可能是方言。请澄清两者。
-
谢谢帕斯卡,我用特定的版本澄清了这个问题。