# Hibernate Problem Table doesnt excist



## c_sidi90 (12. Sep 2011)

Ich habe nach folgendem Tutorial aus dem Forum die Schritte soweit es ging 1 zu 1 durchgearbeitet.

Tutorial: Hibernate mit MySQL (erste Schritte) : blog.buhbuhbuh.de

Nachdem mir einige Jars gefehlten hatten habe ich diese schließlich alle in den Classpath geladen und dachte, nun sollte alles funktionieren, dem war jedoch nicht so.

Starte ich meine Applikation erscheint neben einen haufen Logzeilen auch folgende Exception:


```
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [de.hibernate.tutorial.gewinnspiel.PersonImpl]
```

Ich denke da ihr sowieso danach fragen werdet, poste ich gleich die xml und propertiefiles dazu.


DATEI : hibernate.cfg.xml
--------------------------------------------

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/gewinnspiel</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">MEINPWHALT</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<!-- Mapping-Dateien -->
<mapping resource="de/hibernate/tutorial/gewinnspiel/personImpl.hbm.xml" />
</session-factory>
</hibernate-configuration>

-----------------------------------------------



DATEI: log4j.properties (Hier klappt alles) 

-----------------------------------------------
log4j.rootLogger=DEBUG, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A4.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

------------------------------------------------

DATEI: personImpl.hbm.xml

-------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="de.hibernate.tutorial.gewinnspiel.PersonImpl">
<id name="id">
<generator class="native" />
</id>
<property name="anrede" />
<property name="vorname" />
<property name="name" />
<property name="strasse" />
<property name="hausnummer" />
<property name="plz" />
<property name="ort" />
<property name="telefonVorwahl" />
<property name="telefonAnschlussNummer" />
<property name="termsAcceptedIp" />
<property name="termsAcceptedTime" />
<property name="geburtsdatum" />
<property name="email" />
<property name="land" />
</class>
</hibernate-mapping>

--------------------------------------------------------

Ich hatte bereits in der hibernate.cfg die Zeile

<property name="hibernate.hbm2ddl.auto">update</property>

durch

<property name="hibernate.hbm2ddl.auto">create</property>

ersetzt, brachte jedoch auch keinen Erfolg.


Lg


----------



## maki (12. Sep 2011)

Mir fehlt da noch etwas vom StackTrace, welche Tabelle genau fehlt ihm denn?

Ansonsten möchte ich noch sagen, dass man immer die Original Doku bevorzugen sollte, ist Qualitativ meist um Welten besser als die anderen 200000 Tutorials in Blogs etc., nicht nur am speziell im Fall von Hibernate, aber vor allem bei Hibernate, jeder Dödel meint nämlich er müsste selber ein noch schlechteres Tutorial basteln


----------



## SlaterB (12. Sep 2011)

man braucht Hibernate 500 Tage und länger um täglich mit der Datenbank zu kommunizieren,
aber die Datenbank muss nur an 1 Tag angelegt werden, 
ist das wirklich eine Aufgabe, die man auch noch nach komischen Regeln der API zumuten muss?
man könnte sich doch auch selber die Create-Skripte zusammenbasteln, 
SQL-Grundkenntnisse und dann auch Wissen über diese konkrete Datenbank, von Spaltennamen zu Datentypen bis Fremdschlüsseln, ist in jedem Fall nützlich


----------



## c_sidi90 (12. Sep 2011)

Also erweiterte Kenntnisse von SQL (MYSQL und FB) habe ich, hibernate ist jedoch Neuland für mich. Da das Tutorial aus diesem Forum (Tutorials von Mitgliedern) kam, dachte ich, es wäre ein gutes um Einzusteigen. Naja wie auch immer hier die Meldung im Detail:


```
xception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [de.hibernate.tutorial.gewinnspiel.PersonImpl]
	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 org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697)
	at de.hibernate.tutorial.gewinnspiel.ErsterVersuch.main(ErsterVersuch.java:50)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'gewinnspiel.personimpl' doesn't exist
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
	at com.mysql.jdbc.Util.getInstance(Util.java:382)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3603)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3535)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1989)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2415)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2333)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2318)
	at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
	... 16 more
```

Davor ist noch eine Exception die JDBC wirft, da wie gesagt kein Table mit dem Namen gefunden werden kann. 
	
	
	
	





```
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'gewinnspiel.personimpl' doesn't exist
```


----------



## AFlieger (13. Sep 2011)

Was mir auffällt, ist, dass in deiner personImpl.hbm.xml nicht angibst, auf welche Tabelle die Klasse gemappt werden soll, d.h. es wird dann einfach der Klassenname als Tabellenname angenommen.

<class name="de.hibernate.tutorial.gewinnspiel.PersonImpl" *table=<tabellenname>*>

<tabellenname> durch deinen ersetzen, dann sollte es klappen.


----------



## c_sidi90 (14. Sep 2011)

> <class name="de.hibernate.tutorial.gewinnspiel.PersonImpl" table=<tabellenname>>


hilft nichts, ich bekomm die selbe Meldung nur das nun gemeckert wird, table USER does not excist. Durch die vorherige Konfiguration sollte laut Tutorial auch automatsch eine Tabelle mit dem Klassennamen angelegt werden, wenn nicht explizit wie du es erläutert hast ein Tabellenname definiert wird.


----------



## maki (14. Sep 2011)

Kann mich nur wiederholen, lies die Hibernate Doku, verschwende nicht deine Zeit und erspare dir unnötigen Frust.

Documentation - Hibernate - JBoss Community

Wenn du das nicht möchtest lasse dir dein Problem vom Author der Tutorials erklären, sollte ihm/ihr die Augen öffnen was es heisst Tutorials zu veröffentlichen, müssen nämlich auch gewartet/getestet/erweitert werden -> das ist Arbeit, und zwar eine die schon sehr oft gemacht wurde, von viel zu vielen...


----------



## c_sidi90 (14. Sep 2011)

Da geb ich dir Recht, danke für den Tipp! Ich werde das Tutorial ruhen lassen und mich in die Doku einlesen, da führt ja meist kein Weg dran vorbei


----------



## maki (14. Sep 2011)

ORM sind sehr komplex, da reicht kein einfaches Tutorial um durchzusteigen, selbst falls es funktionieren sollte


----------

