Come recuperare sessionFactory dalla Sospensione 4.3.4.Finale?

In precedenza mi è stato utilizzando il codice riportato di seguito per configurare la sessionFactory, ma dopo l’aggiornamento la versione del mio sospensione dall’4.2.1.Finale a 4.3.4.Finale, non riesco a recuperare sessionFactory utilizzando il codice riportato di seguito come ServiceRegistryBuilder() è deprecato.

Ho usato questo link a creare, ma la funzione fornita non è la restituzione di qualsiasi cosa quindi non corre in pre-errore di compilazione.

 private static SessionFactory configureSessionFactory() {
        try {
            Configuration configuration = new Configuration();
            configuration.configure();
            serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
            return sessionFactory;
        } catch (HibernateException e) {
            System.out.append("** Exception in SessionFactory **");
            e.printStackTrace();
        }
        return sessionFactory;
    }

     static {
    try {
        sessionFactory = configureSessionFactory();
    } catch (Exception e) {
        System.err.println("%%%% Error Creating SessionFactory %%%%");
        e.printStackTrace();
    }
}

private HibernateUtil() {
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}

public static Session getSession() throws HibernateException {
    Session session = threadLocal.get();

    if (session == null || !session.isOpen()) {
        if (sessionFactory == null) {
            rebuildSessionFactory();
        }
        session = (sessionFactory != null) ? sessionFactory.openSession() : null;
        threadLocal.set(session);
    }

    return session;
}

public static void rebuildSessionFactory() {
    try {
        sessionFactory = configureSessionFactory();
    } catch (Exception e) {
        System.err.println("%%%% Error Creating SessionFactory %%%%");
        e.printStackTrace();
    }
}

public static void closeSession() throws HibernateException {
    Session session = (Session) threadLocal.get();
    threadLocal.set(null);

    if (session != null) {
        if (session.isOpen()) {
            session.close();
        }
    }
}
  • Che cosa fa il tuo metodo setField fare? Sembra abbastanza fondamentale, dopo tutto…
InformationsquelleAutor AlexCartio1 | 2014-03-13



3 Replies
  1. 7

    In 4.3, si dovrebbe utilizzare il StandardServiceRegistryBuilder invece.

    import org.hibernate.boot.registry.StandardServiceRegistryBuilder

    StandardServiceRegistryBuilder è stato aggiunto un nuovo genitore di ServiceRegistryBuilder. Il resto del codice, deve essere la stessa. L’unico posto che ho trovato questo documentato “chiaramente” è la 4.3 Javadoc per ServiceRegistryBuilder.

    Una cosa che non ho notato è che hanno cambiato il ServiceRegistryBuilder.buildServiceRegistry() metodo solo StandardServiceRegistryBuilder.build(). Pertanto, si richiede di modificare quella parte del processo di costruzione:

    new ServiceRegistryBuilder()
            .applySettings(configuration.getProperties())
            .buildServiceRegistry();

    Diventa:

    new StandardServiceRegistryBuilder()
            .applySettings(configuration.getProperties())
            .build();
    • restituisce i seguenti errori java.lang.riflettere.InvocationTargetException, java.lang.NoSuchMethodError: org.hibernate.integrator.internal.IntegratorServiceImpl.(Ljava/util/LinkedHashSet;Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService;)V
    • Messaggi: org.hibernate.integrator.internal.IntegratorServiceImpl.(Ljava/util/LinkedHashSet;Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService;)V del File: org/hibernate/boot/registry/BootstrapServiceRegistryBuilder.java numero di Riga: 215
    • Assicurarsi di aver rimosso tutte le versioni precedenti di Sospensione dal tuo classpath. Guardando su github, non vedo il motivo che potrebbe essere causato meno si era verificato il class loader problemi causati da conflitti di versione, come la IntegratorServiceImpl esiste in entrambe le versioni che si sono/erano in uso, il che suggerisce un class loader problema per me.
    • si prega di dare un’occhiata alla mia domanda, stackoverflow.com/questions/23646389/…
  2. 0

    Ho provato questo e funziona su Hibernate 4.3.6

    public class HUtil{   
      private static SessionFactory sessionFactory;
    private static ServiceRegistry serviceRegistry;
    
    public static SessionFactory createSessionFactory() {
      Configuration configuration = new Configuration();
      configuration.configure();
    serviceRegistry = new StandardServiceRegistryBuilder().
     applySettings(configuration.getProperties()).build();
      sessionFactory = configuration.configure().      buildSessionFactory(serviceRegistry);
      return sessionFactory;
    }
    
    public static SessionFactory getSessionFactory() {
        return createSessionFactory();
    }  }
  3. -2

    Sì, hanno deprecato la precedente ServiceRegistryBuilder(), ecco come si può fare con Sospensione 4.3.4

    public void testConnection() throws Exception {
    
                logger.info("Trying to Connect With a DataBase.");
                Configuration configuration = new Configuration();
                configuration.configure("Your.cfg.xml");
                ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder().applySettings(configuration
                                .getProperties());
                SessionFactory sessionFactory = configuration
                                .buildSessionFactory(serviceRegistryBuilder.buildServiceRegistry());
                Session session = sessionFactory.openSession();
                logger.info("Database connection created successfuly.");
        }

    Fonte: Creare una sessione di fabbrica in modalità di Ibernazione 4

    • ServiceRegistryBuilder è deprecato in versione 4.3.4.Finale
    • versione 4.3.4.Finale @AlexCartio1 i dettagli della versione che è già accennato nel titolo della tua domanda . Comunque, ho aggiunto il .3.4 per una maggiore chiarezza.

Lascia un commento