Hibernate und HSQL DB Problem

Status
Nicht offen für weitere Antworten.

ARadauer

Top Contributor
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
Java:
<!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>
Java:
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");
   }
}
Java:
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;
    }

}
Java:
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?
 
Zuletzt bearbeitet:
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]
 
Hallo,
ich meine mich zu erinnern das es Probleme mit der
Java:
<property name="hbm2ddl.auto">update</property>
Einstellung gab. Eventuell kannst du dort mal mit der Suche weitermachen....
Ciao velalluka
 
Hallo,
ich meine mich zu erinnern das es Probleme mit der
Java:
<property name="hbm2ddl.auto">update</property>
Einstellung gab. Eventuell kannst du dort mal mit der Suche weitermachen....
Ciao velalluka
Ist aber nur relevant wenn ein neuer (Test-)lauf stattfindet.

Denke der TS vermisst seine Daten in der DB nach einem Lauf 😉
 
Java:
   @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 :-(
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben