Hibernate + swing

0

Mam problem chcę stworzyć aplikację okienkową która będzie łączyła się z bazą przez hibernate i utknąłem tu:

AnnotationConfiguration config = new AnnotationConfiguration();
config.addAnnotatedClass(Pracownik.class);
config.configure();
		
		
SessionFactory faktory = config.buildSessionFactory();
Session session = faktory.getCurrentSession();

Chciał bym aby po kliknięciu przycisku otworzyło mi się okienko (nowa sesja) wykonała jakieś operacje np wprowadzenie/usuniecie/modyfikacja danych z bazy. Nie chcę natomiast tworzyć nowego obiektu faktory który jest ciężki i zabiera cenny czas a ten chcę zweryfikować (napisać program który zmierzy mi czas wykonania operacji w danej sesji razem z tworzeniem fabryki i tylko samej sesji)
I tu prośba do was o pomoc, jak stworzyć w głównej klasie konfiguracje połączenia + fabryki a w innej klasie tylko obiektu sesji i operacji w niej dokonywanych?
IDEA:

class x
//tworzenie konfiguracji i obiektu fabrykisesji
AnnotationConfiguration config = new AnnotationConfiguration();
config.addAnnotatedClass(Pracownik.class);
config.configure();
SessionFactory faktory = config.buildSessionFactory();

class y
//stworzenie obiektu rozpoczecie sesji operacje na danych w "tej" sesji
Session session = faktory.getCurrentSession();
session.beginTransaction();
session.save(pracownik);
session.getTransaction().commit();

0

SessionFactory niech bedzie static

0

Kilka dróg, każda dobra.

  1. Napisz osobną klasę, która będzie dostarczała sesję i maskowała fabrykę:
public class MySessionFactory{

   private static SessionFactory factory;

   public static void configure(Class<?>... entitiesClasses){
     // konfiguracja
   }

   public static Session getNewSession(){
     // zwraca nową sesję
   }

   public static Session getCurrentSession(){
      // zwraca obecną sesję
   }
}
  1. Utwórz sobie klasę, która będzie dostarczała fabrykę, a nie sesję.
  2. Użyj np. Guice do zarządzania zależnościami i oznacz fabrykę jako singleton.
0

Kapitalne rady z tym static działa! ;]
Dzięki!

Może jeszcze dodam gotowca a nóż się komuś przyda:

 
//klasa do fabryki
package org.main.Hibernate;

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

public class HibernateConfig {
	private static final SessionFactory sessionFactory;
	
	static {
		try{
			sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
		}
		catch(Throwable ex){
			System.err.println("problem z tworzeniem fabryki: "+ ex);
			throw new ExceptionInInitializerError(ex);
		}
	}
	public static SessionFactory getSessionFactory(){
		return sessionFactory;
	}
	
}

i klasa w której działamy na sesji wystarczy użyć np

import org.main.Hibernate.HibernateConfig;	
public static void main(String[] arg0){
		Session session = HibernateConfig.getSessionFactory().openSession();
       
                //i już można działać na danej sesji 
}

 

Może dorównam wam kiedyś poziomem i sam będę doradzał ;]
Pozdrawiam można zamknąć ^^

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