Estoy usando Websphere Application Server 7 con buildin OpenJPA 1.2.3 y una base de datos Oracle. Tengo la siguiente entidad:Rendimiento La consulta OpenJPA (3000+ registros) es lenta
@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;
}
}
Y el siguiente código para recuperar los contratos:
Query query = entityManager.createNamedQuery(Contract.GIVE_ALL_CONTRACTS);
query.setParameter(1, referenceDate);
List contracts = query.getResultList();
entityManager.clear();
return contracts;
Los contratos recuperados se pasan a un servicio web.
La ejecución de esta consulta en Oracle Developer toma alrededor de 0,35 segundos para 3608 registros. La llamada a query.getResultList() tarda alrededor de 4 segundos.
Con un registrador en el constuctor de la entidad, registra que hay alrededor de 10-20 entidades creadas con la misma marca de tiempo. Luego, 0,015 segundos hace algo más. Supongo que cosas de OpenJPA.
¿Hay alguna manera de acelerar OpenJPA? ¿O es la única solución de almacenamiento en caché?
Le sugiero que use profiler. – user1516873