2012-05-18 64 views
1

我使用eclipse持久性jpa与OracleDriver,我无法得到为什么它显示日志中的一些额外的查询。 例子:jpa setMaxResults额外查询

Query q = em.createQuery("SELECT v FROM Vehicle v") 
       .setFirstResult(0) 
       .setMaxResults(1); 

List<Vehicle> list = q.getResultList(); 

我的EclipseLink日志中看到的是:

Execute query ReadAllQuery(referenceClass=Vehicle sql="SELECT ID, ... FROM VEHICLE") 

[EL Fine]: 2012-05-18 11:03:28.076--ServerSession(763807850)--Connection(340360448)--Thread(Thread[main,5,main]) 

    --SELECT * FROM (SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum FROM (SELECT ID AS a1, .... FROM VEHICLE) a WHERE ROWNUM <= ?) WHERE rnum > ? 
       bind => [1, 0] 

所以,第一个查询真让我害怕。它是否真的查询表中的所有记录,即使我使用setMaxResults?

回答

1

不,它不会读取所有记录。发送到db连接器的查询是第二个。

+0

谢谢,第一个是什么意思? – mik

+0

我的猜测是,第一个是JPQL,所以它基本上是你的查询重写。您可以尝试使用大数据库来断言我的断言,并比较执行时间和没有setMaxResults的情况 – perissf