Czy funkcja buildSessionFactory () jest przestarzała w hibernate 4?

Kiedy zaktualizowałem wersję Hibernate z 3.6.8.finał do 4.0.0.na koniec dostałem ostrzeżenie o przestarzałej metodzie buildSessionFactory() w tej linijce:

private static final SessionFactory sessionFactory =
         new Configuration().configure().buildSessionFactory();

Javadoc zaleca użycie innej metody

buildSessionFactory(ServiceRegistry serviceRegistry)

Ale w dokumentacji znalazłem przestarzały wariant : (

Pomożesz mi z tym małym nieporozumieniem ?
Author: pushistic, 2011-12-24

16 answers

Tak, jest przestarzały. Zamień swoją SessionFactory na:

In Hibernate 4.0, 4.1, 4.2

private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;

public static SessionFactory createSessionFactory() {
    Configuration configuration = new Configuration();
    configuration.configure();
    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(
            configuration.getProperties()). buildServiceRegistry();
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    return sessionFactory;
}

UPDATE:

W Hibernate 4.3 ServiceRegistryBuilder jest przestarzały . Zamiast tego użyj poniższego.

serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
            configuration.getProperties()).build();
 366
Author: batbaatar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-21 10:27:40

Tak, jest przestarzały. http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory() w szczególności mówi ci, aby użyć innej metody, którą zamiast tego znalazłeś (buildSessionFactory(ServiceRegistry serviceRegistry)) - więc użyj jej.

Dokumentacja jest kopiowana od wydania do wydania i prawdopodobnie nie została jeszcze zaktualizowana ( nie przepisują instrukcji przy każdym wydaniu) - więc zaufaj Javadoc.

Specyfikę tej zmiany można obejrzeć at:

Niektóre dodatkowe Bibliografia:

 15
Author: ziesemer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-24 18:12:31

Lub

public class Hbutil {

    private static SessionFactory sessionFactory;
    private static ServiceRegistry serviceRegistry;

    private static SessionFactory configureSessionFactory() throws HibernateException {
        Configuration configuration = new Configuration();
        configuration.configure();
        serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        
        sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        return sessionFactory;
    }

    public static SessionFactory getSessionFactory() {
        return configureSessionFactory();

    }
}
 6
Author: mixturez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-29 12:32:42

To proste: dokumenty JBoss nie są w 100% doskonale utrzymane. Idź z co mówi JavaDoc: buildSessionFactory(ServiceRegistry serviceRegistry).

 4
Author: Matt Ball,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-24 00:59:35

Kod zweryfikowany do działania w Hibernate 4.3.0. Zauważ, że możesz usunąć parametr XML filename lub podać tam własną ścieżkę. To jest podobne do (ale literówki poprawione) innych postów tutaj, ale ten jest poprawny.

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;    


Configuration configuration = new Configuration();
configuration.configure("/com/rtw/test/hiber/hibernate.cfg.xml");
ServiceRegistry  serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();        
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
 4
Author: MAA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-09 07:27:06

Nie jest niczym niezwykłym znajdowanie rozbieżności między różnymi wersjami dokumentacji. Większość programistów postrzega dokumentację jako obowiązek i zwykle odkłada ją na później.

Z reguły, jeśli javadoc mówi jedno, a jakaś dokumentacja nie-javadoc temu zaprzecza, jest szansa, że javadoc jest dokładniejszy. Programiści są bardziej skłonni do aktualizowania javadoc ze zmianami w kodzie ... ponieważ "źródło" javadoc jest w tym samym pliku co kod.

W przypadku tagów @deprecated jest wirtualną pewnością, że javadoc jest dokładniejszy. Deweloperzy deprecate rzeczy po starannym rozważeniu ... i (ogólnie rzecz biorąc) nie cofają ich.

 4
Author: Stephen C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-16 23:36:03

Lepszy sposób na stworzenie obiektu SessionFactory w najnowszym wydaniu hibernate4.3.0 dalej jest tak:

Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(builder.build());
 3
Author: kavi temre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-16 02:33:35

Jeśli używasz Hibernate 5.2 i wyżej, możesz użyć tego:

  private static StandardServiceRegistry registry;
  private static SessionFactory sessionFactory;

  public static SessionFactory getSessionFactory() {
    if (sessionFactory == null) {
      try {
        // Creating a registry
        registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();

        // Create the MetadataSources
        MetadataSources sources = new MetadataSources(registry);

        // Create the Metadata
        Metadata metadata = sources.getMetadataBuilder().build();

        // Create SessionFactory
        sessionFactory = metadata.getSessionFactoryBuilder().build();

      } catch (Exception e) {
        e.printStackTrace();
        if (registry != null) {
          StandardServiceRegistryBuilder.destroy(registry);
        }
      }
    }
    return sessionFactory;
  }

  //To shut down
 public static void shutdown() {
    if (registry != null) {
      StandardServiceRegistryBuilder.destroy(registry);
    }
  }
 2
Author: Hasan K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-25 07:14:28
public class HibernateSessionFactory {

private static final SessionFactory sessionFactory = buildSessionFactory1();

private static SessionFactory buildSessionFactory1() {
Configuration configuration = new Configuration().configure(); // configuration
                                                                // settings
                                                                // from
                                                                // hibernate.cfg.xml

StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();


serviceRegistryBuilder.applySettings(configuration.getProperties());

ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();

return configuration.buildSessionFactory(serviceRegistry);
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
 }

public static void shutdown() {
// Close caches and connection pools
getSessionFactory().close();
 }
 1
Author: Bharathiraja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-15 04:25:42

Public void sampleConnection () rzuca wyjątek {

     Configuration cfg = new Configuration().addResource("hibernate.cfg.xml").configure();
     StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
     SessionFactory sessionFactory = configuration.buildSessionFactory(ssrb.build());
     Session session = sessionFactory.openSession();
     logger.debug(" connection with the database created successfuly.");
}
 0
Author: Creditto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-25 07:06:45

Edytowałem metodę stworzoną przez batbaatar powyżej więc przyjmuje obiekt konfiguracyjny jako parametr:

    public static SessionFactory createSessionFactory(Configuration configuration) {
        serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
                configuration.getProperties()).build();
        factory = configuration.buildSessionFactory(serviceRegistry);
        return factory;
    }

W klasie głównej zrobiłem:

    private static SessionFactory factory;
    private static Configuration configuration 
    ...      
    configuration = new Configuration();
    configuration.configure().addAnnotatedClass(Employee.class);
    // Other configurations, then           
    factory = createSessionFactory(configuration);
 0
Author: Nadjib Mami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:18

In Hibernate 4.2.2

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class Test {
    public static void main(String[] args) throws Exception
{
    Configuration configuration = new Configuration()
            .configure();

    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(
            configuration.getProperties()).buildServiceRegistry();

    SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

    Session session = sessionFactory.openSession();

    Transaction transaction = session.beginTransaction();

    Users users = new Users();

    ... ...

    session.save(users);

    transaction.commit();

    session.close();

    sessionFactory.close();

    }
}
 0
Author: saneryee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-11 09:24:03
Tested on 4.2.7 release

package com.national.software.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

import com.national.software.dto.UserDetails;

public class HibernateTest {

    static SessionFactory sessionFactory;

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        UserDetails user = new UserDetails();
        user.setUserId(1);
        user.setUserName("user1");

        Configuration config = new Configuration();
        config.configure();

        ServiceRegistry  serviceRegistry = (ServiceRegistry) new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
        sessionFactory = config.buildSessionFactory(serviceRegistry);

        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.save(user);
        session.getTransaction().commit();

    }

}
 0
Author: Pratap A.K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-14 06:58:05

Tutaj jest wiele przestarzałych API w rdzeniowym frameworku Hibernate.

Stworzyliśmy fabrykę sesji jak poniżej:

SessionFactory sessionFactory = new Configuration ().configure ().buildSessionFactory ();

Metoda buildSessionFactory jest przestarzała z wydania hibernate 4 i jest zastępowana przez nowe API. Jeśli używasz hibernate 4.3.0 i nowszych, Twój kod musi być:

  1. Configuration configuration = new Configuration ().konfiguracja();

  2. StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder ().applySettings (configuration.getProperties());

  3. SessionFactory factory = configuration.buildSessionFactory (konstruktor.zbuduj());

Klasa ServiceRegistryBuilder jest zastępowana przez StandardServiceRegistryBuilder z 4.3.0. Wygląda na to, że w wydaniu 5.0 będzie dużo zmian. Nadal nie ma wiele jasności na temat przestarzałych Interfejsy API i odpowiednie alternatywy do użycia. Każde przyrostowe wydanie pojawia się z bardziej przestarzałym API, są one w drodze dostrajania podstawowego frameworka dla wydania 5.0.

 0
Author: Creditto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-21 09:59:41

W hibernate 5.3.1 Możesz spróbować tego:

ServiceRegistry standardRegistry = 
                new StandardServiceRegistryBuilder().configure().build();

Metadata sources = new MetadataSources(standardRegistry).addAnnotatedClass(MyEntity.class).getMetadataBuilder().build();

SessionFactory sf = sources.buildSessionFactory();
 0
Author: Wazza El,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-26 13:06:30

Wystarczy zaimportować następujący pakiet,

import org.hibernate.cfg.Configuration;
 -2
Author: Prasad Bhosale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-03 14:30:57