Est-ce que buildSessionFactory () est déprécié dans hibernate 4?

quand j'ai mis à jour la version D'hibernation de 3.6.8.finale de la 4.0.0.final j'ai reçu un avertissement sur la méthode dépréciée buildSessionFactory() dans cette ligne:

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

le javadoc recommande l'utilisation d'une autre méthode

buildSessionFactory(ServiceRegistry serviceRegistry)

mais dans la documentation j'ai trouvé variante dépréciée : (

Pouvez-vous m'aider avec ce petit malentendu ?

207
demandé sur pushistic 2011-12-24 04:43:56

16 réponses

Oui il est déprécié. Remplacer votre SessionFactory par ce qui suit:

In Hibernation 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;
}

mise à jour:

Dans Hibernate 4.3 ServiceRegistryBuilder est obsolète . Utilisez plutôt ce qui suit.

serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
            configuration.getProperties()).build();
366
répondu batbaatar 2016-11-21 10:27:40

Oui, il est déprécié. http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory () vous dit spécifiquement d'utiliser l'autre méthode que vous avez trouvé à la place ( buildSessionFactory(ServiceRegistry serviceRegistry) ) - donc utilisez-le.

la documentation est copiée de la version à la version, et n'a probablement pas encore été mise à jour (ils ne réécrivent pas le manuel avec chaque version) - donc faites confiance aux Javadocs.

le les détails de ce changement peuvent être consultés à l'adresse suivante:

quelques références supplémentaires:

15
répondu ziesemer 2011-12-24 18:12:31

ou

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
répondu mixturez 2013-03-29 12:32:42

c'est aussi simple que cela: les docs JBoss ne sont pas 100% parfaitement bien entretenus. Allez avec ce que le JavaDoc dit : buildSessionFactory(ServiceRegistry serviceRegistry) .

4
répondu Matt Ball 2011-12-24 00:59:35
Code

confirmé pour L'hibernation 4.3.0. Remarquez que vous pouvez supprimer le paramètre de nom de fichier XML, ou bien y fournir votre propre chemin. Ceci est similaire à (mais typos corrigé) d'autres postes ici, mais celui-ci est correct.

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
répondu MAA 2014-05-09 07:27:06

il n'est pas inhabituel de trouver des divergences entre les différentes versions de la documentation. La plupart des développeurs considèrent la documentation comme une corvée, et ils ont tendance à la retarder.

en règle générale, si le javadoc dit une chose et qu'une documentation non-javadoc la contredit, il y a de fortes chances que le javadoc soit plus précis. Les programmeurs sont plus susceptibles de garder la javadoc à jour avec les modifications du code ... parce que la" source " pour le javadoc est dans le même le dossier de code.

dans le cas des étiquettes @deprecated , il est pratiquement certain que le javadoc est plus précis. Les développeurs déprécient les choses après mûre réflexion ... et (en général) ils ne les sous-estiment pas.

4
répondu Stephen C 2016-01-16 23:36:03

une meilleure façon de créer SessionFactory objet dans la dernière version d'hibernation 4.3.0 en avant est comme suit:

Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(builder.build());
3
répondu kavi temre 2015-05-16 02:33:35

si vous utilisez hibernation 5.2 et plus alors vous pouvez utiliser ceci:

  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
répondu Hasan K 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
répondu Bharathiraja 2014-04-15 04:25:42

public void sampleConnection () sorts Exception {

     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
répondu Creditto 2014-07-25 07:06:45

j'ai édité la méthode créée par batbaatar au-dessus de de sorte qu'elle accepte l'objet de Configuration comme paramètre:

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

dans la classe principale I did:

    private static SessionFactory factory;
    private static Configuration configuration 
    ...      
    configuration = new Configuration();
    configuration.configure().addAnnotatedClass(Employee.class);
    // Other configurations, then           
    factory = createSessionFactory(configuration);
0
répondu Nadjib Mami 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
répondu saneryee 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
répondu Pratap A.K 2015-03-14 06:58:05

voici de nombreux APIs dépréciés dans le cadre d'hibernation.

nous avons créé la session factory comme suit:

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

la méthode buildSessionFactory est dépréciée de la version hibernate 4 et elle est remplacée par la nouvelle API. Si vous utilisez l'hibernation 4.3.0 et plus, votre code doit être:

  1. Configuration configuration = nouvelle Configuration().configure ();

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

  3. SessionFactory factory factory = configuration.buildSessionFactory(générateur de rapports.build ());

Classe ServiceRegistryBuilder est remplacé par StandardServiceRegistryBuilder à partir de 4.3.0. Il semble qu'il y aura beaucoup de changements dans la version 5.0. Il n'y a pas encore beaucoup de clarté sur les IPA dépréciés et les solutions de rechange appropriées à l'utilisation. Chaque version incrémentielle est dotée d'une API plus dépréciée, ils sont en train de peaufiner le cadre de base de la version 5.0.

0
répondu Creditto 2015-04-21 09:59:41

Dans hibernate 5.3.1 , vous pouvez essayer ceci:

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

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

SessionFactory sf = sources.buildSessionFactory();
0
répondu Wazza El 2018-06-26 13:06:30

juste importer l'emballage suivant,

import org.hibernate.cfg.Configuration;
-2
répondu Prasad Bhosale 2014-08-03 14:30:57