Estoy teniendo problemas para la generación de una sesión de fábrica en modo de Hibernación 4. En Hibernate 3 I simple hecho:

org.hibernate.cfg.Configuration conf= HibernateUtil
    .getLimsInitializedConfiguration(systemConfiguration
.getHibernateconfFile());

SessionFactory sf = conf.configure().buildSessionFactory();

Ahora tengo que pasar un ServiceRegistry clase a buildSessionFactory, pero los Javadocs son extremadamente vagas sobre cómo ir sobre esto. Algún consejo?

InformationsquelleAutor MTR | 2011-11-02

8 Comentarios

  1. 70

    Sí, se han quedado obsoletas las anteriores buildSessionFactory de la API, y es muy fácil de hacer así.. se puede hacer algo como esto..

    EDITAR : ServiceRegistryBuilder está en desuso. debe utilizar StandardServiceRegistryBuilder

    public void testConnection() throws Exception {
    
                logger.info("Trying to create a test connection with the database.");
                Configuration configuration = new Configuration();
                configuration.configure("hibernate_sp.cfg.xml");
                StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
                SessionFactory sessionFactory = configuration.buildSessionFactory(ssrb.build());
                Session session = sessionFactory.openSession();
                logger.info("Test connection with the database created successfuly.");
        }

    Para más referencia y en la profundidad de detalle, se puede comprobar la hibernación oficial de caso de prueba en https://github.com/hibernate/hibernate-orm/blob/master/hibernate-testing/src/main/java/org/hibernate/testing/junit4/BaseCoreFunctionalTestCase.java función (buildSessionFactory()).

    • usted salvó mi vida!
    • Buena explicación. Solucionado mis dudas.
    • Al parecer, el tipo de «ServiceRegistryBuilder» está ahora en desuso. Las actualizaciones sobre cómo hacer esto, evitando código obsoleto?
    • Uso StandardServiceRegistryBuilder lugar.
  2. 18

    Probar esto!

    package your.package;
    
    import org.hibernate.HibernateException;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.hibernate.service.ServiceRegistryBuilder;
    
    public class HibernateUtil
    {
        private static SessionFactory sessionFactory;
        private static ServiceRegistry serviceRegistry;
    
        static
        {
            try
            {
    //         Configuration configuration = new Configuration();
                Configuration configuration = new Configuration().configure();
    
                serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
                sessionFactory = configuration.buildSessionFactory(serviceRegistry);
            }
            catch (HibernateException he)
            {
                System.err.println("Error creating Session: " + he);
                throw new ExceptionInInitializerError(he);
            }
        }
    
        public static SessionFactory getSessionFactory()
        {
            return sessionFactory;
        } 
    }
    • thanx montones… voy a probar esto…. 🙂
    • Me encanta cuando las personas muestran las importaciones, me hace todos los difusa en el interior así como asegurarse de que tiene la correcta espacios de nombres.
    • o pueden utilizar el nombre de clase completo, por lo que puede guardar algunas de las líneas!!!
  3. 11
    Configuration hibConfiguration = new Configuration()
                .addResource("wp4core/hibernate/config/table.hbm.xml")
                .configure();       
    
    serviceRegistry = new ServiceRegistryBuilder()
                .applySettings(hibConfiguration.getProperties())
                .buildServiceRegistry();
    
    sessionFactory = hibConfiguration.buildSessionFactory(serviceRegistry);
    session = sessionFactory.withOptions().openSession();
  4. 7

    La siguiente expresa la experiencia que he tenido con hibernate 4.0.0.Final.

    El javadoc (se distribuye bajo licencia LGPL) de org.hibernate.cfg.Configuration clase establece que:

    NOTA : Este será reemplazado por el uso de ServiceRegistryBuilder y
    org.hibernate.metamodel.MetadataSources lugar después de la versión 4.0 en la que el punto de esta clase se convertirá en obsoleto y programado para la eliminación de 5.0. Ver HHH-6183, HHH-2578 y
    HHH-6586 para más detalles

    Después de mirar problema 2578, he utilizado algo como esto:

    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().configure().buildServiceRegistry();
    MetadataSources metadataSources = new MetadataSources(serviceRegistry);
    metadataSources.addResource("some_mapping.hbm.xml")
    SessionFactory sessionFactory = metadataSources.buildMetadata().buildSessionFactory();

    Para que inicie la lectura de configuración, he tenido que modificar mi hibernación 3.2.6 configuración de los archivos de asignación y el uso de xmlns="http://www.hibernate.org/xsd/hibernate-configuration" y xmlns="http://www.hibernate.org/xsd/hibernate-mapping" y también quitar el dtd especificaciones.

    No podía encontrar un camino para que se inspeccione asignaciones definidas en hibernate.cfg.xml y de hibernación. prefijo para hibernar relacionados con las propiedades en hibernate.cfg.xml ya no es opcional.

    Esto podría funcionar para algunos.

    Yo, por una vez, se encontró con algunos de error debido a que la asignación de los archivos contenidos <cache usage="read-write" /> y terminó con obsoleta de Configuración de la forma:

    Configuration configuration = new Configuration().configure();
    SessionFactoryImpl sessionFactory = (SessionFactoryImpl) configuration.buildSessionFactory();
    EventListenerRegistry listenerRegistry = sessionFactory.getServiceRegistry().getService(EventListenerRegistry.class);
    SolrIndexEventListener indexListener = new SolrIndexEventListener(); //a SaveOrUpdateEventListener i wanted to attach
    listenerRegistry.appendListeners(EventType.SAVE_UPDATE, indexListener);

    He tenido a través de programación anexar los detectores de eventos, ya que la Configuración ya no se ve para ellos en hibernate.cfg.xml

    • MetadataSources es lo que va a utilizar a partir de 5.0 (después 4.0). La solución correcta es más a lo largo de las líneas de ZE pixota la respuesta. Los detectores de eventos se espera que para ser manejado por las implementaciones de org.hibernate.el integrador.spi.Integrador
  5. 5

    Incluso hay una actualización en 4.3.0 API. ServiceRegistryBuilder también está en desuso en 4.3.0 y reemplazado con el StandardServiceRegistryBuilder. Ahora el código real para la creación de la sesión de fábrica sería este ejemplo en la creación de sesión de fábrica.

    • Gracias, todas las respuestas que he visto en este hilo están en desuso
    • Como para 4.3.0 sólo funciona esto!
  6. 2

    [cita de http://www.javabeat.net/session-factory-hibernate-4/%5D

    Hay muchas APIs en desuso en la hibernate core framework. Una de las frustrante punto en este momento es, hibernate documentación oficial no está proporcionando las instrucciones claras sobre cómo usar la nueva API y estadísticas que la documentación esté completa. También cada versión incremental presenta cambios en algunos de los importantes de la API. Una de éstas es la nueva API para la creación de la sesión de fábrica en modo de Hibernación 4.3.0 en las salas. En nuestro versiones anteriores hemos creado la sesión de fábrica de la siguiente manera:

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

    El método buildSessionFactory está en desuso desde la hibernación de liberación 4 y se reemplaza con la nueva API. Si está utilizando el modo hibernación 4.3.0 y por encima, el código tiene que ser:

    Configuration configuration = new Configuration().configure();
    
    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
    
    SessionFactory factory = configuration.buildSessionFactory(builder.build());

    Clase ServiceRegistryBuilder es reemplazado por StandardServiceRegistryBuilder de 4.3.0. Parece que habrá muchos cambios en la versión 5.0. Todavía no hay mucha claridad en el desuso y las Api de las alternativas adecuadas para el uso. Cada incremental versión viene con más obsoleto de la API, que son en forma de afinar el marco principal para la versión 5.0.

  7. 1

    En versiones anteriores de la sesión de fábrica fue creada de la siguiente manera:

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

    El método buildSessionFactory está en desuso desde la hibernación de liberación 4 y se sustituye con la nueva API. Si está utilizando el modo hibernación 4.3.0 y por encima, el código tiene que ser como:

    Configuration configuration = new Configuration().configure();
    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
    applySettings(configuration.getProperties());
    SessionFactory factory = configuration.buildSessionFactory(builder.build());
  8. 1

    El método buildSessionFactory está en desuso desde la Hibernación de liberación 4 y se sustituye con la nueva API. Si está utilizando el modo Hibernación 4.3.0 y por encima, el código tiene que ser:

    Configuration configuration = new Configuration().configure();
    
    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
            .applySettings(configuration.getProperties());
    
    SessionFactory factory = configuration.buildSessionFactory(builder.build());

Dejar respuesta

Please enter your comment!
Please enter your name here