Saltar al contenido

Cómo establecer el período de tiempo de espera en una consulta JPA EntityManager

Siéntete en la libertad de divulgar nuestro espacio y códigos con tus amigos, ayúdanos a ampliar esta comunidad.

Solución:

Si ahí javax.persistencia.consulta.tiempo de espera. De acuerdo con la especificación JPA 2.0, el soporte para esta sugerencia de consulta es opcional:

Las aplicaciones portátiles no deben confiar en esta sugerencia. Según el proveedor de persistencia y la base de datos en uso, la sugerencia puede o no cumplirse.

El valor predeterminado (en milisegundos) se puede establecer en persistence.xml para todas las consultas:


También se puede dar la misma propiedad al crear EntityManagerFactory a través de Persistence.createEntityManagerFactory.

También se puede anular/establecer por consulta:

query.setHint("javax.persistence.query.timeout", 2000);

La misma funcionalidad se puede obtener a través de attribute sugerencias en NamedQuery.

Hay dos formas de configurar el período de tiempo de espera de la consulta con Hibernate.

La forma específica de Hibernate

Si está arrancando Hibernate de forma nativa o si está desenvolviendo el JPA java.persistence.Query a su org.hibernate.query.Query equivalente, entonces puedes usar el setTimeout método:

List posts = entityManager
.createQuery(
    "select p " +
    "from Post p " +
    "where lower(p.title) like lower(:titlePattern)", Post.class)
.setParameter("titlePattern", "%Hibernate%")
.unwrap(org.hibernate.query.Query.class)
.setTimeout(1)
.getResultList();

Note que el setTimeout método toma un int argumento que especifica el valor de tiempo de espera en segundos.

La forma de sugerencia de consulta JPA

También puede usar una sugerencia de consulta JPA, como se ilustra en el siguiente ejemplo:

List posts = entityManager
.createQuery(
    "select p " +
    "from Post p " +
    "where lower(p.title) like lower(:titlePattern)", Post.class)
.setParameter("titlePattern", "%Hibernate%")
.setHint("javax.persistence.query.timeout", 50)
.getResultList();

Note que el javax.persistence.query.timeout la sugerencia de consulta toma el valor de tiempo de espera en milisegundos.

La forma de sugerencia de consulta de Hibernate

También puede utilizar el org.hibernate.timeout sugerencia de consulta:

List posts = entityManager
.createQuery(
    "select p " +
    "from Post p " +
    "where lower(p.title) like lower(:titlePattern)", Post.class)
.setParameter("titlePattern", "%Hibernate%")
.setHint("org.hibernate.timeout", 1)
.getResultList();

Note que el org.hibernate.timeout la sugerencia de consulta toma el valor de tiempo de espera en segundos.

No se te olvide comunicar esta división si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *