# Hibernate in Verbindung mit Hsql



## shortys (10. Nov 2010)

Hallo zusammen,

ich habe eine Klasse HibernateConfiguration:


```
private Configuration cfg;

	public HibernateTemplate getHibernateTemplate() {
		return new HibernateTemplate(cfg.buildSessionFactory(), true);
	}

	public HibernateConfiguration() {
		cfg = new Configuration().configure("/de/shortys/myhome/api/persistence/Hibernate.cfg.xml");
	}

	public void addResource(String resource) throws MappingException {
		cfg = cfg.addResource(resource);
		System.out.println("Resource added: " + resource);
	}
```

Diese liest meine hibernate.cfg.xml-Datei ein.


```
<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
  <session-factory>
     <!-- Database connection settings -->
        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
        <property name="connection.url">jdbc:hsqldb:file:database/MyHome;shutdown=true</property>
        <property name="connection.username">sa</property>
        <property name="connection.password"></property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
		<property name="format_sql">true</property>
        <!-- Drop and re-create the database schema on startup 
        <property name="hbm2ddl.auto">update</property>-->

  </session-factory>
</hibernate-configuration>
```

Die Mappingfiles füge ich mit Hilfe addResource-Methode in der Configuration ein.
Zu Testzwecken habe ich zur Zeit ein Mapping: 


```
<?xml version="1.0"?>
<!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.shortys.myhome.spritmonitor.model.FuelFilling"
		table="FUEL_FILLING">
		<id name="key">
			<column name="Key" />
		</id>
		<property name="dateAdded">
			<column name="DateAdded" />
		</property>
		<property name="dateEdited">
			<column name="DateEdited" />
		</property>
		<property name="dateFilled">
			<column name="DateFilled" />
		</property>
		<property name="distance">
			<column name="Distance" />
		</property>
		<property name="amount">
			<column name="Amount" />
		</property>
		<property name="charges">
			<column name="Charges" />
		</property>
	</class>
</hibernate-mapping>
```

Das Mapping wird von Hibernate korrekt validiert und wird anscheinend auch der Configuration hinzugefügt. Beim Debuggen ist mir aufgefallen, dass die Tabelle für besagtes Mapping auch mit allen Spalten vorhanden ist nur habe ich folgendes Problem:

Wenn ich nun versuche ein Objekt über das Hibernatetemplate hinzuzufügen kommt folgende Exception:

```
Caused by: java.sql.SQLException: Table not found in statement [insert into FUEL_FILLING (DateAdded, DateEdited, DateFilled, Distance, Amount, Charges, Key) values (?, ?, ?, ?, ?, ?, ?)]
	at org.hsqldb.jdbc.Util.throwError(Unknown Source)
	at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source)
	at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
	at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)
	at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94)
	at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87)
	at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:222)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2224)
	... 36 more
```

Die sollte mir ja eigentlich sagen, dass die Tabelle nicht vorhanden ist. Wie gesagt ist diese aber in meiner Configuration vorhanden und ich frage mich ob ich die Hsqldb per Hand starten muss, damit diese auch praktisch vorhanden ist. Oder gibt es vllt etwas anderes, dass ich beachten muss.

Jemand eine Idee was ich tun kann ?


----------



## shortys (10. Nov 2010)

Ok. Hab nun rausgefunden, dass wenn ich die Tabelle in der *.script-Datei von HSQL anlege kein Fehler mehr auftritt, jedoch will ich ja das Hibernate das für mich erledigt.


----------



## shortys (10. Nov 2010)

Lösung: Nach hinzufügen eines Mappings


```
new SchemaExport(cfg).execute(false, true, false, true);
```


----------

