我是 JPA 的新手,我为我的 Web 服务编写了简单的 JPA 选择。我之前使用的是经典的 SQL 语句。太好了,我知道如何获得稳定的速度,但我现在在 5 个不同的项目中使用 3 个不同的数据库。所以我认为学习 JPA 是使用一种技术而不是必须了解 3 种 SQL 语言的好方法。所以我创建了一些表、实体并尝试使用 JPA。但是第一时间出了点问题——速度。
(我正在使用 MSSQL 2008)
我比较了简单的原生 SQL 选择和 JPA 选择:
em.createNativeQuery("SELECT c.* FROM Table c", MyTable.class);
和
em.createQuery("SELECT c FROM Table c", MyTable.class)
createNativeQuery
快了 5 倍,但为什么呢?
所以我启动了包含在 MSSQL 包中的 SQL 分析器并调试了 JPA 正在做什么。我有一张包含 100 条记录的表,我所看到的让我感到惊讶:
createNativeQuery
创建 1 个对 db 的请求,结果是查询中的 100 条记录createQuery
创建 100 个请求,每个请求返回 1 条记录。像这样的东西:1 SELECT Col1, Col2 FROM TABLE WHERE (ID = ?)<br> 2 SELECT Col1, Col2 FROM TABLE WHERE (ID = ?)<br> . . . 100 SELECT Col1, Col2 FROM TABLE WHERE (ID = ?)
我将 JPA 2 与 Eclipse Link 一起使用。这是 JPA 工作方式的正常行为吗?或者我在设置中做错了什么。