Estoy usando oracle10g de la base de datos y eclipselink, necesito obtener el último insertado clave de la tabla así que he creado esta consulta

javax.persistence.Query q =   
                    em.createQuery("SELECT nvl(MAX(c.myAtt),0) " +   
                        "from myTable as c");   
             return Integer.parseInt(q.getSingleResult().toString());   `

Pero cuando la tabla está vacia(a veces puede ser vacía)
me estoy poniendo ILEGAL ARGUMENTO de EXCEPCIÓN, causa: JPQL Excepción, detalle: «se produjo Una excepción durante la creación de una consulta en EntityManager». Lo que estoy haciendo mal?

  • ¿El problema ocurre en la em.createQuery(), o en q.getSingleResult()? Puede que usted ajuste el nivel de registro para ver el SQL generado (Hibernate tiene esta, no estoy seguro acerca de EclipseLink)?
InformationsquelleAutor J. Bend | 2009-08-01

4 Comentarios

  1. 2

    Mientras tanto, alguien más podría haber introducido algo en Autorizaciones y, a continuación, recibirá el identificador incorrecto

  2. 2

    Podría utilizar el COALESCE función. Puede ser utilizado para lograr el mismo como nvl. Por ejemplo:

    select nvl(columna,'1') from table
    select COALESCE(columna,'1') from table
  3. 1

    Parafraseando Apu, «no sé qué parte de esa pregunta para corregir primera» 🙂

    Primera de todas, la recuperación de los últimos inserta la clave de esta manera es un MUY MALO © Es peligroso, ineficaz y, sobre todo, innecesario, ya que su JPA ya lo hace por ti: una vez que usted inserte su entidad, su identificador de propiedad se actualizará automáticamente para contener su clave principal.

    En segundo lugar, en cuanto a tu consulta va, «myTable» no es algo que usaría en JPQL, deberá especificar su nombre de la entidad en su lugar (por ejemplo, si estás asignación de «Auto» a «CAR_TABLE» debes usar «Auto» en lugar de «CAR_TABLE» en las consultas JPQL).

    Finalmente, NVL() no es compatible con JPQL. Es compatible (una especie de, a través de Expression.ifNull()) por EclipseLink Expresiones. No que iba a necesitar en un escenario como este, de todos modos.

Dejar respuesta

Please enter your comment!
Please enter your name here