-->
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.  [ 9 posts ] 
Author Message
 Post subject: Hibernate mit Annotations
PostPosted: Mon Dec 11, 2006 9:48 am 
Newbie

Joined: Mon Dec 11, 2006 9:22 am
Posts: 7
Hallo,

Ich versuche grade Hibernate mit Annotations zu verwenden, und bekomme es einfach nicht zum laufen:

Ich habe zuerst das Tutorial durchgearbeitet. - Das funktionierte sehr schoen, nutzt aber keine Annotations.

Danach habe ich versuch das funktionierende Beispiel mit Hilfe der Anleitung auf Annotations umzustellen.

Ich habe die benoetigten Libraries eingebunden, die Klasse mit Entity annotiert und im hibernate.cfg.xml das mapping-resource auf ein passendes mapping-class umgestellt, und die session-factory wie in der Anleitung mit AnnotationConfiguration erzeugt.

Wenn ich das (vorher laufende) Programm nun starte, weigert sich es nun zu laufen:

Code:
[...]
[java] 14:39:15,604  WARN UserSuppliedConnectionProvider:23 - No connection properties specified - the user must supply JDBC connections
     [java] Initial SessionFactory creation failed.org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
     [java] Exception in thread "main" java.lang.ExceptionInInitializerError
     [java] at util.HibernateUtil.<clinit>(Unknown Source)
     [java] at events.EventManager.createAndStoreEvent(Unknown Source)
     [java] at events.EventManager.main(Unknown Source)
     [java] Caused by: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
     [java] at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:57)
     [java] at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39)
     [java] at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:409)
     [java] at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:119)
     [java] at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2006)
     [java] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1289)
     [java] ... 3 more
     [java] Java Result: 1


Der relevante Teil aus der hibernate.cfg.xml ist wohl:
Code:
        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
        <property name="connection.url">jdbc:hsqldb:hsql://localhost</property>
        <property name="connection.username">sa</property>
        <property name="connection.password"></property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
[...]
      <mapping class="events.Event"/>


Hat jemand eine Ahnung was ich falsch gemacht habe?
Gehoert die Angabe der Datenbank ueberhaupt in diese Datei?
(Wo gebe ich sie ggf sonst besser an?)

Gibt es irgendwo ein komplettes Beispiel zum spicken? (Ich konnte mit google wirklich keins finden.)

Danke schonmal im Vorraus.
PS: Hinweise auf passendere Doku werden selbstverstaendlich gerne angenommen.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 11, 2006 10:40 am 
Newbie

Joined: Tue Oct 31, 2006 5:12 pm
Posts: 9
wenn du deinen gesammten code postest, kann dir vieleicht jemand helfen.

ach ja teste mal:

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


in deiner hibernate.cfg.xml(gleich nach "<property name="connection.password"></property>").

wenn es funkst sag bescheid.

mfg


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 11, 2006 11:35 am 
Newbie

Joined: Mon Dec 11, 2006 9:22 am
Posts: 7
Es handelt sich im wesentlichen um das Beispiel aus dem Tutorial.
Ich hatte gehofft, das man evt. aus der Fehlermeldung schon das Problem erkennen kann.

Hier die zu persistierende Klasse:
Code:
package events;

import java.util.Date;
import javax.persistence.*;

@Entity
public class Event {
   @Id
    private Long id;

    private String title;
    private Date date;

    public Event() {}

    public Long getId() {return id;}
    @SuppressWarnings("unused")
    private void setId(Long id) {this.id = id;}
    public Date getDate() {return date;}
    public void setDate(Date date) {this.date = date;}
    public String getTitle() {return title;}
    public void setTitle(String title) {this.title = title;}
}


Die hibernate.cfg:
Code:
<?xml version='1.0' encoding='utf-8'?>
<!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:hsql://localhost</property>
        <property name="connection.username">sa</property>
        <property name="connection.password"></property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

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

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">create</property>

        <!--mapping resource="events/Event.hbm.xml"/-->
        <mapping class="events.Event"/>
    </session-factory>

</hibernate-configuration>


EventManager.java:
Code:
package events;

import org.hibernate.Session;
import java.util.Date;
import util.HibernateUtil;

public class EventManager {

    public static void main(String[] args) {
        EventManager mgr = new EventManager();

        if (args[0].equals("store")) {
            mgr.createAndStoreEvent("My Event", new Date());
        }

        HibernateUtil.getSessionFactory().close();
    }

    private void createAndStoreEvent(String title, Date theDate) {

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();

        session.beginTransaction();

        Event theEvent = new Event();
        theEvent.setTitle(title);
        theEvent.setDate(theDate);

        session.save(theEvent);

        session.getTransaction().commit();
    }

}


und die HibernateUtil.java:
Code:
package util;

import org.hibernate.*;
import org.hibernate.cfg.*;

public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            // sessionFactory = new Configuration().configure().buildSessionFactory();
            sessionFactory = new AnnotationConfiguration().buildSessionFactory();

        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 11, 2006 11:55 am 
Newbie

Joined: Tue Oct 31, 2006 5:12 pm
Posts: 9
teste mal das:


Code:
package events;

import java.util.Date;
import javax.persistence.*;

@Entity
public class Event {
   
    private Long id;
    private String title;
    private Date date;

    @Id
    @GeneratedValue(strategy = Generation.Type.AUTO)
    public Long getId() {return id;}

    private void setId(Long id) {this.id = id;}
    @Temporal(Temporal.TIMESTAMP)
    public Date getDate() {return date;}
    public void setDate(Date date) {this.date = date;}
    @Column(length = 100)
    public String getTitle() {return title;}
    public void setTitle(String title) {this.title = title;}
}


vergiss aber nicht die einstellungen in der hibernate.cfg.xml


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 11, 2006 12:41 pm 
Newbie

Joined: Mon Dec 11, 2006 9:22 am
Posts: 7
Nein, das bringt absolut nichts.
Laut der Fehlermeldung scheint er ja auch eher ein Problem mit der Datenbank zu haben denn mit der Klasse.

Wenn ich die hibernate.cfg.xml loesche(bzw. umbenenne) bleibt die Fehlermeldung immernoch die selbe. Deshalb vermute ich mal, dass er die Einstellungen darin einfach ignoriert und sich deshalb ueber fehlende Angaben beschwert.

Sind aber nur Vermutungen. Vielleicht weiss ja jemand was konkretes.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 11, 2006 7:21 pm 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Du rufst nicht configure für Deine annotationConfiguration auf

_________________
Best Regards
Sebastian
---
Training for Hibernate and Java Persistence
Tutorials for Hibernate, Spring, EJB, JSF...
eBook: Hibernate 3 - DeveloperGuide
Paper book: Hibernate 3 - Das Praxisbuch
http://www.laliluna.de


Top
 Profile  
 
 Post subject:
PostPosted: Tue Dec 12, 2006 5:28 am 
Newbie

Joined: Tue Oct 31, 2006 5:12 pm
Posts: 9
genau.

mach mal folgendes:

Code:
sessionFactory = new AnnotationConfiguration().configure("pfad/hibernate.cfg.xml").buildSessionFactory();



den pfad kannst du weglassen wenn die hibernate.cfg.xml direkt im classes folder liegt.


Top
 Profile  
 
 Post subject: Problem in der Anleitung
PostPosted: Wed Dec 13, 2006 8:22 am 
Newbie

Joined: Wed Dec 13, 2006 8:13 am
Posts: 1
Location: Berlin
Ich hatte das gleiche Problem, und ich habe auch andere Postings in Englisch gesehen. Die Anleitung ist nicht richtig geschrieben. Ich weiss nicht, wie oder an wen, aber man sollte vielleicht das mitteilen, sodass jemand die aendert. Bei dem core package (ohne Annotations) ist der Aufruf richtig eingestellt...

Und Danke fuer den Tipp. Ich waere wahrscheinlich nie drauf gekommen


Top
 Profile  
 
 Post subject:
PostPosted: Fri Dec 15, 2006 9:26 am 
Newbie

Joined: Mon Dec 11, 2006 9:22 am
Posts: 7
LaLiLuna wrote:
Du rufst nicht configure für Deine annotationConfiguration auf


Danke dir.
Wenn ich es explizit konfiguriere funktioniert das tatsaechlich.
Mich wundert nur warum in der offiziellen Dokumentation einfach nur
Code:
sessionFactory = new AnnotationConfiguration().buildSessionFactory();
ohne irgend ein configure steht.

Ok, in der hibernate.properties kann man noch seine Angaben zur Datenbank machen. Dann ist ein explizites .configure wohl tatsaechlich ueberfluessig. Und es wuerde erklaeren, warum die dort angegebenen hibernate.cfg.xml-Dateien keine Angaben zur Datenbank und so haben.

Wenn ich aber meine Klassen in hibernate.cfg.xml angebe, muss ich diese Datei doch auch nochmal explizit einlesen. Dann brauch ich also doch noch ein .configure, oder uebersehe ich da was?


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 9 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.