found - getsingleresult jpa example
¿Por qué en las consultas de JPA EntityManager arroja NoResultException pero no encuentra? (4)
Cuando haces un descubrimiento, jpa usa la clave primaria para localizar el objeto de la entidad, a menudo usando un segundo nivel de caché y es mucho más rápido que createQuery y getSingleResult.
O obtienes nulo o el objeto vuelve a buscar. Cuando hace una createQuery y se crea una instancia de objeto Query. Si haces una getResultList no arrojará una NoResultException, solo si haces un getSingleResult lanzará esa excepción. Si haces una getResultList y no se encuentra ninguna, entonces se devolverá null.
¿Puede alguien decirme las razones intrínsecas por las que en el Administrador de Entidades JPA 1.0 cuando recupera un Objeto mediante búsqueda, tiene que tratar con nulos si no los encuentra, pero cuando usa la interfaz de Consulta mediante createQuery, getResultList arroja una NoResultException cuando no se encuentra.
Tal vez me falta algo, pero creo que es muy incoherente para un lenguaje, y en realidad tuve que hacer un gran rediseño debido al cambio de un simple buscador a una consulta más detallada utilizando la interfaz de consulta.
Gracias chicos.
Además, NoResultException marcará la transacción retrotraída en weblogic 10.3.2.
Vea este artículo: NoResultException marca la reversión de transacción
Creo que elimina esta verificación nula:
Object o = q.getSingleResult();
if (o != null)
return (MyObj) o;
return o;
Al introducir RuntimeException (NoResultException), los programadores pueden convertir q.getSingleResult () en MyObj de forma segura y dejar la excepción al llamador.
En cuanto a q.getResultList (), siempre devolverá una lista, null-check no es necesario.
Pero todavía siento que esto no es intuitivo.
Las consultas se pueden usar para recuperar casi cualquier cosa, incluido el valor de una sola columna en una sola fila.
Si getSingleResult()
devolvería null, no podría decir si la consulta no coincidía con ninguna fila o si la consulta coincidía con una fila, pero la columna seleccionada contiene nulo como su valor.