Holen Sie sich nextval Wert Sequenz von einfachen java Abfrage auf einer PostgreSQL-DB

Arbeite ich auf einer PostgreSQL-Datenbank und ich bin versucht, wiederherstellen einer nextval Sequenz durch eine einfache Abfrage von Java, aber Es funktioniert nicht :

  Query q = entityManager.createQuery("SELECT nextval(numcallcartnewcart) as num");
    BigDecimal result=(BigDecimal)q.getSingleResult();   
    return result.longValue();

(Natürlich ist es nicht die beste Lösung, aber ich kann das nicht besser, denn ich bin blockiert durch die Hibernate Konfiguration mit der composite-id-tag, die nicht akzeptieren, einen generator Reihenfolge so :

        <column name="num_call" />
             <generator class="sequence">
                    <param name="sequence">numcallcartnewcart</param>
             </generator>

in der key-Eigenschaft tag :

   <key-property name="numCall" type="int">
    <column name="num_call"/>
   </key-property>

)
Hier ist der Fehler der Abfrage:

 \-[METHOD_CALL] MethodNode: '('
    +-[METHOD_NAME] IdentNode: 'nextval' {originalText=nextval}
    \-[EXPR_LIST] SqlNode: 'exprList'
       \-[IDENT] IdentNode: 'numcallcartnewcart' {originalText=numcallcartnewcart}

    at org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:154)
    at org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:845)
    at org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:633)

Es ist mehr oder weniger das gleiche mit createNativeQuery (aber nicht den gleichen Fehler) :

Caused by: org.postgresql.util.PSQLException: ERROR: column « numcallcartnewcart » does not exist
  Position: 16
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834)

EDIT : Mit Zitat

Query q = entityManager.createNativeQuery("SELECT nextval('numcallcartnewcart') as num");

        BigDecimal result=(BigDecimal)q.getSingleResult();   
        return result.longValue();

--

Caused by: org.postgresql.util.PSQLException: ERREUR: la relation « numcallcartnewcart » n'existe pas
  Position: 16
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)

EDIT 2 : (Das problem war, dass ich nicht über die Reihenfolge, in meine Datenbank (nicht im guten...)

Und wir haben die Verwendung von einem BigInteger, nicht ein BigDecimal, und verwenden zitieren, um Sequenz-name :

    Query q = entityManager.createNativeQuery("SELECT nextval('numcallcartnewcart') as num");
    BigInteger result=(BigInteger)q.getSingleResult();   
    return result.longValue(); 
Ich glaube, Sie haben zu verwenden createNativeQuery hier leider nicht...nur es funktioniert in der SQL-Konsole, dann kopieren Sie den java-code aus 🙂

InformationsquelleAutor Quentin T. | 2015-04-16

Schreibe einen Kommentar