私はWebsphere Application Server 7をbuildin OpenJPA 1.2.3およびOracleデータベースとともに使用しています。契約を取得するためのパフォーマンスOpenJPAクエリ(3000+レコード)が遅い
@NamedNativeQuery(name=Contract.GIVE_ALL_CONTRACTS,
query="SELECT number, name \n" +
"FROM contracts \n" +
"WHERE startdate <= ?1 \n" +
"AND enddate > ?1",
resultSetMapping = Contract.GIVE_ALL_CONTRACTS_MAPPING)
@SqlResultSetMapping(name = Contract.GIVE_ALL_CONTRACTS_MAPPING,
entities = { @EntityResult(entityClass = Contract.class, fields = {
@FieldResult(name = "number", column = "number"),
@FieldResult(name = "name", column = "name")
})
})
@Entity
public class Contract {
public static final String GIVE_ALL_CONTRACTS = "Contract.giveAllContracts";
public static final String GIVE_ALL_CONTRACTS_MAPPING = "Contract.giveAllContractsMapping";
@Id
private Integer number;
private String name;
public Integer getNumber() {
return number;
}
public String getName() {
return name;
}
}
し、次のコード:
Query query = entityManager.createNamedQuery(Contract.GIVE_ALL_CONTRACTS);
query.setParameter(1, referenceDate);
List contracts = query.getResultList();
entityManager.clear();
return contracts;
取り出さ契約がWebサービスに渡され、私は、次のエンティティを持っています。
Oracle開発者でこの問合せを実行すると、3608レコードで約0.35秒かかります。 query.getResultList()の呼び出しには約4秒かかります。
エンティティのコンストラクタ内のロガーでは、同じタイムスタンプで作成されたエンティティが約10-20個存在することを記録します。その後、0,015秒で何か他のことをします。私はOpenJPAのものを推測する。
OpenJPAをスピードアップする方法はありますか?または、唯一のソリューションキャッシュですか?
私はあなたがプロファイラを使用することをお勧めします。 – user1516873