我有一个与使用 JPA 的 SQL 查询的性能有关的问题。
响应时间:
- 使用 Toad - 200 毫秒
- 在我的项目中使用Glassfish 2.1、Java 1.5、Hibernate 3.4.0.ga - 27 s
甲骨文 10g
Glassfish 和 Toad 托管在同一台机器上。我已经从同一个 Glassfish、JPA 等连接到其他 ddbb,并且性能很好。所以我不知道发生了什么。
我有两种不同的环境。在其中之一(理论上最坏的情况下)它运行得很快。另一方面,这是我遇到问题的地方。
使用Javax.persistence.Query对象执行查询,并在该对象中使用 setParameter() 方法插入参数。之后,我调用 getResultList() 方法,该方法将寄存器返回给我。在这一点上是时间过多的地方。
但是,如果我替换代码中的参数并直接调用 getResultList() 方法,而不在 Query 对象中设置参数,性能会好很多。
任何人都可以帮助我提供有关问题的任何线索或如何追踪它?
询问
SELECT A, B, ..., DATE_FIELD FROM
(SELECT A, B, C FROM Table1
WHERE REGEXP_LIKE(A, NVL(UPPER(:A),'')) AND DATE_FIELD = :DATE
UNION
SELECT A, B, C FROM Table2
WHERE REGEXP_LIKE(A, NVL(UPPER(:A),'')) AND DATE_FIELD = :DATE)
Java 代码
public Query generateQuerySQL(String stringQuery, HashMap<String, Object> hParams) {
Query query = em.createNativeQuery(stringQuery);
if (hParams != null) {
for (Iterator<String> paramNameList = hParams.keySet().iterator(); paramNameList.hasNext() {
String name = paramNameList.next();
Object value = hParams.get(name);
query.setParameter(name, value);
}
}
return query;
}