# Hibernate und HSQL DB Problem



## ARadauer (17. Sep 2009)

Hi ich versuche gerade mit Hibernate Objekte in eine HSQL DB zu speichern. Jedoch, speichert mir die Datenbank die Daten nicht, beim Nächsten Start des Programms ist die DB wieder leer..

Das wär doch ok oder <property name="connection.url">jdbc:hsqldb:file:db/miner</property>

also mal alles zusammen

```
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
<hibernate-configuration>
    <session-factory>  	
		<property name="connection.pool_size">1</property>
		<property name="current_session_context_class">thread</property>
		<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
        <property name="connection.url">jdbc:hsqldb:file:db/miner</property>
        <property name="connection.username">sa</property>
        <property name="connection.password"></property>        
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>	
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
		<property name="jdbc.batch_size">0</property>
        <property name="hbm2ddl.auto">update</property>	
		<mapping class="com.rad.miner.Tourney"/>	
	</session-factory>
</hibernate-configuration>
```


```
package com.rad.miner;

import java.util.List;

import org.hibernate.Session;


public class Main {
   public static void main(String args[]){
      System.out.println("läuft");
      Session session = HibernateUtil.getSessionFactory().getCurrentSession();
      session.beginTransaction();
      for (int i = 0; i < 10; i++) {         
         Tourney tourney = new Tourney();
         tourney.setName("name#"+i);
         session.saveOrUpdate(tourney);
      }
      session.getTransaction().commit();
      
      Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();
      session2.beginTransaction();
      List<Tourney> list = session2.createQuery("FROM Tourney").list();
      for (Tourney t : list) {
         System.out.println(t.getName());
      }
      session2.close();
      System.out.println("fertig");
   }
}
```


```
package com.rad.miner;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;


public class HibernateUtil {
	private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            return new AnnotationConfiguration()           	      	
            	.configure()
            	.buildSessionFactory();
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.out.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

}
```


```
package com.rad.miner;

import java.text.DecimalFormat;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Tourney {
   
   @Id
   @GeneratedValue
   private Long id;
   ...
```
also Grundsätzlich funktioniert es... nur in der Scrpt Datei der DB hab ich dann sowas drin



> CREATE MEMORY TABLE TOURNEY...


Dadurch werden mir die Daten nicht dauerhaft gespeichert, was ich aber gerne hätte... was kann ich dagegen machen?


----------



## maki (17. Sep 2009)

Denke das Problem wird sein dass die JVM endet bevor HSQLDB auf die Idee kommt die Daten auf die Platte zu schreiben.

Was passiert denn, wenn ins Startup Skript folgende Zeile einfügst:
[c]SET WRITE_DELAY 0 MILLIS[/c]


----------



## velaluka (17. Sep 2009)

Hallo,
ich meine mich zu erinnern das es Probleme mit der 
	
	
	
	





```
<property name="hbm2ddl.auto">update</property>
```
 Einstellung gab. Eventuell kannst du dort mal mit der Suche weitermachen....
Ciao velalluka


----------



## maki (17. Sep 2009)

velaluka hat gesagt.:


> Hallo,
> ich meine mich zu erinnern das es Probleme mit der
> 
> 
> ...


Ist aber nur relevant wenn ein neuer (Test-)lauf stattfindet.

Denke der TS vermisst seine Daten in der DB nach einem Lauf


----------



## ARadauer (17. Sep 2009)

```
@Temporal(value=TemporalType.TIMESTAMP)
   private Date startDate;
   @Temporal(value=TemporalType.TIMESTAMP)
   private Date endDate;
```

Ich hatte meine Date Members nicht annotiert... darum hatts nicht geklappt. Jetzt funktionierts super...
seltsam :-(


----------

