org.hibernate.Ausnahme.SQLGrammarException: could not insert [com.Probe.Person]
Ich versuche, eine kleine funktionierende Beispiel von Hibernate, die ich gefunden hier Jedoch wenn ich den code bekomme ich den folgenden Fehler
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [com.sample.Person]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2345)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2852)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
at .....
Caused by: org.postgresql.util.PSQLException: ERROR: relation "person" does not exist
Position: 13
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334)
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
... 23 more
Aber ich habe bereits eine Tabelle mit dem Namen person in der Datenbank und hier ist meine geändert hibernate.cfg.xml
<!-- hibernate dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.url">jdbc:postgresql://localhost/testDB</property>
<property name="hibernate.connection.username">postgres</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.show.sql" ></property>
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<!-- Automatic schema creation (begin) === -->
<property name="hibernate.hbm2ddl.auto">create</property>
<!-- Simple memory-only cache -->
<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- ############################################ -->
<!-- # mapping files with external dependencies # -->
<!-- ############################################ -->
<mapping resource="com/sample/Person.hbm.xml" />
</session-factory>
Es wäre toll, wenn jemand darauf hinweisen könnte, was ich falsch mache, dies ist mein Erster Versuch in den Ruhezustand versetzt werden.
Danke!
BEARBEITEN: Person.hbm.xml
<class name="com.sample.Person" table="person">
<id name="id" column="ID">
<generator class="native" />
</id>
<property name="name">
<column name="NAME" length="16" not-null="true" />
</property>
<property name="surname">
<column name="SURNAME" length="16" not-null="true" />
</property>
<property name="address">
<column name="ADDRESS" length="16" not-null="true" />
</property>
</class>
EDIT-II: Inhalt der log-Datei (Postgresql.log)
2012-02-13 09:23:25 IST LOG: database system was shut down at 2012-02-10 18:14:57 IST
2012-02-13 09:23:25 IST FATAL: the database system is starting up
2012-02-13 09:23:33 IST LOG: database system is ready to accept connections
2012-02-13 09:23:38 IST LOG: autovacuum launcher started
2012-02-13 09:46:01 IST ERROR: syntax error at or near "auto_increment" at character 41
2012-02-13 09:46:01 IST STATEMENT: create table person (ID bigint not null auto_increment, NAME varchar(16) not null, SURNAME varchar(16) not null, ADDRESS varchar(16) not null, primary key (ID)) type=InnoDB
2012-02-13 09:46:01 IST ERROR: relation "person" does not exist at character 13
2012-02-13 09:46:01 IST STATEMENT: insert into person (NAME, SURNAME, ADDRESS) values ($1, $2, $3) RETURNING *
2012-02-13 09:46:01 IST LOG: could not receive data from client: No connection could be made because the target machine actively refused it.
2012-02-13 09:46:01 IST LOG: unexpected EOF on client connection
2012-02-13 09:48:15 IST ERROR: syntax error at or near "auto_increment" at character 41
2012-02-13 09:48:15 IST STATEMENT: create table person (ID bigint not null auto_increment, NAME varchar(16) not null, SURNAME varchar(16) not null, ADDRESS varchar(16) not null, primary key (ID)) type=InnoDB
2012-02-13 09:48:15 IST ERROR: relation "person" does not exist at character 13
2012-02-13 09:48:15 IST STATEMENT: insert into person (NAME, SURNAME, ADDRESS) values ($1, $2, $3) RETURNING *
2012-02-13 09:48:15 IST LOG: could not receive data from client: No connection could be made because the target machine actively refused it.
2012-02-13 09:48:15 IST LOG: unexpected EOF on client connection
UPDATE: ich habe gerade bemerkt etwas seltsam ist, erstelle ich die Beziehung in der DB und dann führen Sie dieses Stück code, nur um zu sehen, dass die Tabelle gelöscht wird wie es nur verschwindet, wenn ich diesen code ausführen; eine Idee warum das passiert?
Hinzugefügt !
InformationsquelleAutor seeker | 2012-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Löste ich den Fehler durch ändern Sie die folgende Eigenschaft in hibernate.cfg.xml
Früher wurde die Tabelle immer gelöscht, jedes mal wenn ich das Programm ausgeführt und nun klappt es, wie hibernate validiert nur das schema und wirkt sich nicht auf änderungen.
InformationsquelleAutor seeker
Entsprechend der Ausnahme, Hibernate schreiben will an der Tabelle "person", noch in Ihrer hbm.xml Sie definieren, dass es eine Tabelle "Person", sind Sie sicher, dass die richtige Tabelle existiert in der Datenbank-schema?
Ich stellte die Korrektur, die ich in Person.hbm.xml aber der Fehler besteht weiterhin
Können Sie öffnen Sie die Datenbank, und überprüfen Sie den Namen der P(p)erson-Tabelle?
es ist 'person' und hier ist das Skript-CREATE TABLE person ( "ID" integer not NULL, "NAME" character varying "NACHNAME" character varying "ADDRESS" character varying ) WITH ( OIDS=FALSE ); ALTER TABLE person EIGENTÜMER postgres;
InformationsquelleAutor quaylar
Hinweis:
Es ist nicht erforderlich, geben Sie Tabellennamen in Person.hbm.xml (........) bei der Erstellung der Tabelle mit dem gleichen class Namen. Auch anwendbar auf Felder.
Beim schaffen der "person" Tabelle in Ihrer jeweiligen Datenbank,stellen Sie sicher, dass alles, was FILEDS Namen, die Sie angegeben Person.hbm.xml übereinstimmen muss mit Tabellen-SPALTEN-Namen ELSE, die Sie wil bekommen, oben genannten Fehler.
InformationsquelleAutor Manjunath
Das problem in meinem Fall war, dass der name der Datenbank war nicht korrekt.
Ich löste das problem, indem er den richtigen Datenbank-Namen in das Feld, wie unten
InformationsquelleAutor Tarun
Es scheint, Sie sind ein anschließen an die falsche Datenbank. R u sure "
jdbc:postgresql://localhost/testDB"
verbinden Sie die tatsächliche datasource ?In der Regel sind Sie von der form
"jdbc://hostname/databasename".
Blick in die Postgresql-log-Datei.Hab das Ding helfen?
Es nicht. Und kann nicht . Es warf eine Fehlermeldung --kann Nicht geöffnet werden " - Verbindung .... Verursacht durch: java.sql.SQLException: No suitable driver found for jdbc://localhost/testDB
Schauen Sie in Ihre conf-Datei. ich glaube, Sie verbinden mit der postgres-Datenbank.
Im sorry, I dont get Sie , und welche Datei werden Sie gefragt, mich zu sehen, sir? Und wenn Sie postgresql.conf, worauf sollte ich achten ?
InformationsquelleAutor Shashank Kadne
Soweit ich weiß kann man auch ändern, aus validieren, aktualisieren, z.B.:
InformationsquelleAutor Secondo
Können Sie versuchen, die richtigen Datenbank-Namen in der Verbindungs-url in der Konfigurationsdatei. Da hatte ich den gleichen Fehler beim ausführen der POJO-Klasse-Datei, und es wurde gelöst.
InformationsquelleAutor amit yadav
Ich sovled diesen Fehler durch ändern der Datenbank-Zeichensatz.Alte Datenbank-Zeichensatz ist
cp1252
und ich conver zuutf-8
InformationsquelleAutor John Trump
Was meinen wir mit
org.hibernate.exception.SQLGrammarException
?Umsetzung von JDBCException, dass das SQL an die Datenbank gesendet server war ungültig (syntax-Fehler, ungültige Objekt Referenzen, etc).
und in meinen Worten, es gibt eine Art von
Grammar
Fehler innerhalb Ihrerhibernate.cfg.xml
Konfigurationsdatei,passiert es, wenn Sie schreiben, falsch-schema-Begriff-Eigenschaft-Namen innen, wie unten Beispiel:
dem so sein soll, wie:
InformationsquelleAutor ArifMustafa