我使用 Hibernate 3.2.7.GA 标准查询从 Oracle Enterprise Edition 10.2.0.4.0 数据库中选择行,并按时间戳字段进行筛选。有问题的字段是类型java.util.Date
在 Java 中,以及DATE
在甲骨文中。
事实证明 https://stackoverflow.com/questions/1945603/why-is-oracle-so-slow-when-i-pass-a-java-sql-timestamp-for-a-date-column该字段被映射到java.sql.Timestamp
,Oracle 将所有行转换为TIMESTAMP
在与传入的值进行比较之前,从而破坏性能。
一种解决方案是使用 HibernatesqlRestriction()
与 Oracle 一起TO_DATE
功能。这将修复性能,但需要重写应用程序代码(大量查询)。
那么有没有更优雅的解决方案呢?由于 Hibernate 已经进行了类型映射,因此可以将其配置为执行正确的操作吗?
Update:该问题在多种配置中都会出现,但以下是一个具体示例:
- Oracle企业版10.2.0.4.0
- Oracle JDBC 驱动程序 11.1.0.7.0
- 休眠3.2.7.GA
- Hibernate 的 Oracle10gDialect
- Java 1.6.0_16
这听起来可能很激烈,但是当面对这个问题时,我们最终将数据库中的所有 DATE 列转换为 TIMESTAMP 类型。我认为这没有任何缺点,如果 Hibernate 是您的主要应用程序平台,那么您将避免将来的麻烦。
Notes:
再次强调,只有当您致力于使用 Hibernate 时,这才有意义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)