Ich verwende Websphere Application Server 7 mit integriertem OpenJPA 1.2.3 und eine Oracle-Datenbank. Ich habe die folgende Einheit:Leistung OpenJPA-Abfrage (3000+ Datensätze) ist langsam
@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;
}
}
und den folgenden Code, um die Verträge zu erhalten:
Query query = entityManager.createNamedQuery(Contract.GIVE_ALL_CONTRACTS);
query.setParameter(1, referenceDate);
List contracts = query.getResultList();
entityManager.clear();
return contracts;
Die abgerufenen Aufträge werden an einen Webservice übergeben.
Das Ausführen dieser Abfrage in Oracle-Entwickler dauert ca. 360 Sekunden für 3608 Datensätze. Der Aufruf von query.getResultList() dauert etwa 4 Sekunden.
Mit einem Logger im Konstruktor der Entität protokolliert er, dass etwa 10-20 Entitäten mit demselben Zeitstempel erstellt wurden. Dann 0,015 Sekunden macht es etwas anderes. Ich denke, OpenJPA Zeug.
Gibt es eine Möglichkeit, OpenJPA zu beschleunigen? Oder ist die einzige Lösung Caching?
Ich empfehle Ihnen Profiler zu verwenden. – user1516873