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();
InformationsquelleAutor Quentin T. | 2015-04-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Namen der Sequenz übergeben werden, wie ein string-literal ist, nicht als Bezeichner:
Mehr details in der Anleitung: http://www.postgresql.org/docs/current/static/functions-sequence.html
Bearbeiten
Den Fehler
zeigt an, daß keine Sequenz mit dem Namen
numcallcartnewcart
vorhanden ist. Sie benötigen zum erstellen der Sequenz.Die Fehlermeldung "FEHLER: Spalte « numcallcartnewcart » nicht vorhanden ist" ist klar. Der Grund dafür ist, dass Sie nicht schließen Sie die Sequenz name im single Angebote. Tun Sie wirklich, die spezifische Fehlermeldung angezeigt, wenn Sie gesetzt werden der name der Sequenz in einfachen Anführungszeichen?
Ja die Fehlermeldung nicht vorhanden ist, vielleicht, es ist eine übersetzung aus dem französischen von mir.
Sie können sehen, meine änderung zu sehen, die Fehler mit Zitat
relation" ist "das Verhältnis" und das wiederum bedeutet, dass Sie nicht haben, eine Sequenz mit dem Namen
numcallcartnewcart
. Bitte zeigen Sie uns Ihren exakt SQL-code, den Sie verwendet, um die Sequenz zu erstellen. Oder die Ausgabe des\ds
Befehl inpsql
InformationsquelleAutor a_horse_with_no_name