konfiguracja hibernate

0

hej,
na poczatku tego posta wspomne ze moje jedyne doswiadczenie bazy danych-java opieralo sie na JDBC i pisaniu recznie zapytan w kodzie. mam teraz ambitny plan ogarniecia hibernate. sciagnelam sobie nawet jakas ksiazke (niestety tak sie tam rozpisuja ze po 100str sie poddalam), przegladalam google.. i chyba (wstyd sie przyznac) nie rozumiem. tzn idee jako tako-tak. ale nie potrafie skonfigurowac. sciagnelam sobie z oficjalnej str hibernate-distribution. teraz chcialabym napisac zwykle pare linijek kodu-aplikacja Test-ktora wypisalaby mi cos z bazy (mysql). i teraz zaczynaja sie schody.. tworze sobie te przykladowa aplikacje Test, dolaczam do niej biblio hibernate3.jar.. no i teraz wedlug tego co doczytalam powinnam:

  1. stworzyc klase Events ktora mialaby metody set(cos tam) i get(cos tam) - czyli tworzymy w moim projekcie klase Events

  2. teraz stworzyc klase ktora by mi to obslugiwala (czyli robila jakies metody typu np setImie itp) - czyli mamy druga klase -
    ObslugaZdarzen - i teraz pierwsza rzecz ktorej nie rozumiem-skoro to ObslugaZdarzen robi mi wszystkie transakcje,
    inserty itd to po co jest mi w sumie klasa Events?

  3. dalej - powinnam stworzyc plik hibernate.cfg.xml gdzie wpisze konfiguracje typu jaka baza, nazwa uzytkownika itd - gdzie mam umiescic ten plik? z plikami zrodlowymi projektu (czyli w src?)

4 potem tworzy plik *.hbml.xml ktora ma byc odwzorowaniem na baze, tak? czyli jesli np w Events i ObslugaZdarzen bede pobierac imie z tabeli imie i nazwisko z tabeli nazwisko to wlasnie tam je umieszczam-gdzie mam umiescic ten plik, rowniez w src?

  1. teraz jak pisze sobie swoja aplikacje, czyli kod wlasciwy projektu Test to tworze po prostu obiekt klasy ObslugaZdarzen i wywoluje metody typu pokazImie()? - znow po co w takim razie klasa Events?

    mam nadz ze nie rozdraznilam nikogo tak trywialnymi (i pewnie dla wiekszosci z Was glupimi) pytaniami. Jesli znajdzie sie ktos na tyle cierpliwy by na nie odpowiedziec-bede mega wdzieczna.
    
    
       pzdr,
               misty
    
0

znalazlam jakis dosc prosty przyklad na necie i sprobowalam go uruchomic, oto pliki:

package Test;

public final class User {
 private int id;

 private String imie;

 private String nazwisko;

 public int getId() {
   return id;
 }

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

 public String getImie() {
   return imie;
 }

 public void setImie(String imie) {
   this.imie = imie;
 }

 public String getNazwisko() {
   return nazwisko;
 }

 public void setNazwisko(String nazwisko) {
   this.nazwisko = nazwisko;
 }
}

dalej:

package Test;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class HibernateExample {

 private final static SessionFactory factory;
 static {
   // 1. Inicjalizacja Hibernate
   Configuration cfg = new Configuration().configure();

   // 2. Utworzenie fabryki sesji Hibernate
   factory = cfg.buildSessionFactory();
 }

 public static void main(String[] args) {
   HibernateExample m = new HibernateExample();
   m.createUsers();
   m.displayUsers();
 }

 public void createUsers() {
   // 3. Otwarcie sesji Hibernate
   Session session = factory.openSession();

   // 4. Rozpoczęcie transakcji
   Transaction tx = session.beginTransaction();

   // 5. Utworzenie użytkownika
   User u = new User();
   u.setImie("Jacek");
   u.setNazwisko("Laskowski");

   // 6. Zapisanie użytkownika w bazie danych
   session.save(u);

   // 7. Zatwierdzenie transakcji
   tx.commit();

   // 8. Zamknięcie sesji Hibernate
   session.close();
 }

 public void displayUsers() {
   // 3. Otwarcie sesji Hibernate
   Session session = factory.openSession();

   // 4. Rozpoczęcie transakcji
   Transaction tx = session.beginTransaction();

   // 5. Utworzenie zapytania SQL do bazy o listę użytkowników
   Criteria criteria = session.createCriteria(User.class);

   // 6. Wykonanie zapytania SQL
   List users = criteria.list();

   // 7. Iterowanie po wyniku zapytania SQL
   for (Iterator it = users.iterator(); it.hasNext();) {
       User user = (User) it.next();
       System.out.println(user);
   }

   // 8. Zatwierdzenie transakcji
   tx.commit();

   // 9. Zamknięcie sesji Hibernate
   session.close();
 }
}

pliki konf
-hibernate.cfg.xml:

<?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>
   <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
   <property name="connection.url">jdbc:hsqldb:.</property>
   <property name="connection.username">sa</property>
   <property name="connection.password"></property>
   <property name="connection.pool_size">1</property>
   <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
   <property name="current_session_context_class">thread</property>
   <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
   <property name="show_sql">true</property>
   <property name="hbm2ddl.auto">create</property>
   <mapping resource="Test/User.hbm.xml"/>
 </session-factory>
</hibernate-configuration>

oraz User.hbm.xml:

<?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 package="pl.net.laskowski">
 <class name="User" table="User">
   <id name="id"><generator class="native"/></id>
   <property name="imie"     column="T_IMIE" length="10" not-null="true"/>
   <property name="nazwisko" column="T_NAZWISKO" length="25" not-null="true"/>
 </class>
</hibernate-mapping>

daje java Test.HibernateExample i dostaje:
"Exception in thread main java.lang.NoClassDefFoundError"

czego mi jeszcze brakuje? tzn wiem ze w konfiguracji jest podana inna baza niz mysql (ktorej chce celowo uzywac) i bazy i tabeli jeszcze nie stworzyla, ale wyglada mi to bardziej na blad jakby nadal czegos mi brakowalo po str konfiguracji..
nie mam pojecia-moglby mi ktos cos doradzic?

      pzdr
0

probowalam cos zrobic z tym przykladem ktory to przedstawilam i stworzylam prosta klase ktora mialaby wyswietlic liste uzytkownikow uzywajac obiektu typu HibernateExample i metody displayUsers() ( kod w pierwszym poscie):

/* 
package Test; 

/** 
 * 
 * @author misty 
 */ 
public class Test { 

    private static HibernateExample _hibernateExample; 

    public Test(){} 

    public static void main(String[] args){ 

        start(); 
    } 



    public static void start(){ 

        _hibernateExample = new HibernateExample(); 
        _hibernateExample.displayUsers(); 

    }//end of start() method 



} 

dostalam jednak errory o biblioteki, wiec pozalaczalam po kolei to czego brakowalo, czyli:

dom4j-1.6.1.jar
slf4j-log4j12-1.5.8.jar
slf4j-api1.5.8.jar

no i z tego co mi teraz wywala juz nie ogarniam, tzn na pewno nadal mi jakiejs biblio brakuje ale nie do konca wiem co. komunikat brzmi:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Level
at org.slf4j.LoggerFactory.getSingleton(LoggerFactory.java:223)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:120)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:269)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:242)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:255)
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:152)
at Test.HibernateExample.<clinit>(HibernateExample.java:26)
at Test.Test.start(Test.java:27)
at Test.Test.main(Test.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 10 more
Java Result: 1

czy ktos z Was bylby w stanie mi cos zasugerowac?

 pzdr,
     misty
0

czy ktos z Was bylby w stanie mi cos zasugerowac?

A co tu sugerować, musisz znaleźć po prostu *.jar w którym umieszczona jest klasa Level. Może spróbuj apache log4j: http://logging.apache.org/log4j/1.2/download.html

Jak nie ta, to szukaj dalej :)

0

Osobiście polecam przerzucenie się na konfiguracje hibernate za pomocą adnotacji. Jeśli zaś jest to aplikacja web'owa pomyśl nad uzyciem spring'a i jakiegoś kontenera połączeń np C3P0.

0

dobra, laduje po kolei jary o ktore krzyczy:

hibernate3.jar
dom-4j-1.6.1.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar
log4j-1.2.15.jar

kompiluje i dostaje:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" java.lang.ExceptionInInitializerError at Test.Test.start(Test.java:27) at Test.Test.main(Test.java:20) Caused by: org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1542) at org.hibernate.cfg.Configuration.configure(Configuration.java:1476) at org.hibernate.cfg.Configuration.configure(Configuration.java:1462) at Test.HibernateExample.<clinit>(HibernateExample.java:26) ... 2 more Caused by: org.dom4j.DocumentException: Error on line 1 of document : Content is not allowed in prolog. Nested exception: Content is not allowed in prolog. at org.dom4j.io.SAXReader.read(SAXReader.java:482) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1532) ... 5 more Java Result: 1

czyli po pierwsze czepia sie do pliku hibernate, ktory wyglada :

<?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> 
<property name="hibernate.cglib.use_reflection_optimizer">true</property> 
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
<property name="connection.url">jdbc:mysql://localhost/nazwa_bazy?useUnicode=true</property> 
<property name="hibernate.connection.username">user</property> 
<property name="hibernate.connection.password">password</property> 
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
<property name="show_sql">true</property> 
</session-factory> 
</hibernate-configuration>

, no a po drugie cos sie czepia do log4j.. nie mam pojecia jak to dalej rozwiklac, nie wiem tez jak poprawnie napisac ten plik.. jest ktos w stanie mi z tym pomoc?

pzdr

1 użytkowników online, w tym zalogowanych: 0, gości: 1