【发布时间】:2013-03-15 10:00:01
【问题描述】:
我有以下代码,它从 Oracle 数据库的单个表中执行一个简单的查询。
entityManager.createQuery(
"SELECT a FROM " + Person.class.getSimpleName()
+ " a WHERE lower(a.firstName) = '" + firstName + "'")
.getSingleResult();
Hibernate 产生以下 sql:
select
*
from
( select
person0_.id as id75_,
person0_.FIRSTNAME as FIRSTNAME75_,
person0_.LASTNAME as LASTNAME75_
from
PERSONS person0_
where
lower(person0_.FIRSTNAME)='john' )
where
rownum <= ?
出于性能原因,我们的 DBA 建议此查询应该更简单。如何使休眠以简化查询 像这样:
select ID, FIRSTNAME, LASTNAME from PERSONS
where lower(FIRSTNAEM) = 'john' and rownum <= 1
谢谢
【问题讨论】:
-
首先我会在字段 FIRSTNAME 上创建一个索引。
-
@StefanBe: 并且该索引将被忽略,因为 where 子句正在使用函数。你需要一个功能索引...
-
啊好的。不知道