-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Tabellen werden nicht angelegt
PostPosted: Sun Jan 22, 2006 4:20 pm 
Newbie

Joined: Sun Jan 22, 2006 3:18 pm
Posts: 2
Hibernate version:
Hibernate 3.1

Name and version of the database you are using:
HSQLDB 1.8

Full stack trace of any exception that occurs:
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [domain.Student]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:65)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1986)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2405)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:37)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:269)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:544)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:533)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:529)
at hibernate.HibernateStartUpManager.saveStudent(HibernateStartUpManager.java:28)
at hibernate.HibernateStartUpManager.main(HibernateStartUpManager.java:12)
Caused by: java.sql.SQLException: Table not found in statement [insert into Student (name, matrikelNr, id) values (?, ?, null)]
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:442)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:93)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1948)
... 16 more

Ich möchte ein einfaches Domänen-Modell bestehend aus drei Klassen mappen.

Code:
@EmbeddableSuperclass
public abstract class Person {
   
   private String id;
   
   private String name;
      
   public String getName() {
      return name;
   }
   public void setName(String firstName) {
      this.name = firstName;
   }
   
   @Id(generate=GeneratorType.IDENTITY)
   public String getId() {
      return id;
   }

   public void setId(String id) {
      this.id = id;
   }
}


Code:
@Entity
public class Student extends Person {
   
   private String matrikelNr;
   
   private List<Fach> fächer;
   
   public Student(){}

   public String getMatrikelNr() {
      return matrikelNr;
   }

   public void setMatrikelNr(String matrikelNr) {
      this.matrikelNr = matrikelNr;
   }

   @OneToMany
   public List<Fach> getFächer() {
      return fächer;
   }

   public void setFächer(List<Fach> fächer) {
      this.fächer = fächer;
   }

}


Code:
@Entity
public class Professor extends Person {
   
   private String titel;
   
   public Professor(){}

   public String getTitel() {
      return titel;
   }

   public void setTitel(String titel) {
      this.titel = titel;
   }
   
}


Code:
@Entity
public class Fach {
   
   private String id;
   
   private String bezeichnung;
   
   public Fach(){}

   public String getBezeichnung() {
      return bezeichnung;
   }

   public void setBezeichnung(String bezeichnung) {
      this.bezeichnung = bezeichnung;
   }

   @Id(generate=GeneratorType.IDENTITY)
   public String getId() {
      return id;
   }

   public void setId(String id) {
      this.id = id;
   }
}


Initialisieren tu ich Hibernate mit der Hibernate-Util-Klasse, wobei ich die Properties folgendermassen setze:

Code:
   static {
        try {
           AnnotationConfiguration cfg = new AnnotationConfiguration();
           cfg.addAnnotatedClass(Person.class)
            .addAnnotatedClass(Student.class)
            .addAnnotatedClass(Professor.class)
            .addAnnotatedClass(Fach.class);
           
           cfg.setProperty("hibernate.connection.driver_class","org.hsqldb.jdbcDriver");
           cfg.setProperty("hibernate.connection.url","jdbc:hsqldb:hsql://localhost");
           cfg.setProperty("hibernate.connection.username","sa");
           cfg.setProperty("hibernate.connection.password","");
           cfg.setProperty("hibernate.connection.pool_size","1");
           cfg.setProperty("hibernate.dialect","org.hibernate.dialect.HSQLDialect");
           cfg.setProperty("hibernate.current_session_context_class","thread");
           cfg.setProperty("hibernate.cache.provider_class","org.hibernate.cache.EhCacheProvider");
           cfg.setProperty("hibernate.show_sql","true");
           cfg.setProperty("hibernate.hbm2ddl.auto","create");
           cfg.setProperty("hibernate.connection.shutdown","true");
           
            sessionFactory = cfg.buildSessionFactory();
        } catch (Throwable ex) {
            // Log exception!
            throw new ExceptionInInitializerError(ex);
        }
    }


Wenn ich versuche einen Studenten in der DB zu speichern kommt obenstehende Exception. Während der Initialisierung wird nur eine Tabelle
STUDENT_FACH angelegt, ansonsten ist die DB leer.

Jemand eine Idee?

Danke + Gruss
SamDutsches


Top
 Profile  
 
 Post subject: Re: Tabellen werden nicht angelegt
PostPosted: Thu Feb 23, 2006 10:37 am 
Newbie

Joined: Thu Oct 21, 2004 10:07 am
Posts: 13
Hallo SamDutsches,

hast Du Dein Problem gelöst?

Die Exception wird durch das Einfügen ausgelöst, weil die Tabelle student nicht existiert.

Was steht denn im log bei der Generierung des DB Schemas?

Tim


Top
 Profile  
 
 Post subject:
PostPosted: Sat Feb 25, 2006 6:26 pm 
Regular
Regular

Joined: Mon Jun 13, 2005 12:21 pm
Posts: 61
Location: Hannover
Hallo,

ich hatte ähnliche Probleme und es kann meines Wissens nach zwei Ursachen haben:
(1) Es gab bis einschließlich Hibernate 3.05 einen "Bug" im HSQLDB Dialect, der dazu führte dass Hibernate und HSQLDB 1.8+ nicht zusammenarbeiten. Die Ursache war das HSQLDB in 1.8 den Syntax geändert hat, ich weiß nicht ob das in 3.1 gefixed ist.
(2) Mit HSQLDB in memory database gibt es probleme wenn man ein schema anlegt. Hibernate versucht beim Schema export alle Tabellen im im angegeben Schema zu erstellen, erstellt das Schema selbst aber nicht. Da bei in memory Datenbanken das Schema aber vorher nicht existiert, schlägt das Anlegen der Tabellen fehl (Logging einschalten) und es kommt spätestens beim Einfügen von Daten zu Fehlern.

Joerg


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.