property name example cfg java hibernate hibernate-5.x

java - name - hibernate.dialect sql server



Migración de Hibernate de 4.3.x a 5.x para el método org.hibernate.cfg.Configuration.getClassMapping(className) (4)

En Hibernate 4.3.x, hay un método getClassMapping(className) de la clase org.hibernate.cfg.Configuration . Pero en Hibernate 5.x, este getClassMapping(className) se elimina de la clase de Configuration .

¿Cuál será la sustitución del código en Hibernate-5?

Por favor, ayuda con este problema de migración.


En Hibernate 3 y 4 harías algo como esto

URL configFileURL = getResource(); //some method to get hold of the location of your hibernate.cfg.xml Configuration configuration = (new Configuration()).configure(configFileURL); Iterator classMappings = configuration.getClassMappings(); while (classMappings.hasNext()) { PersistentClass persistentClass = (PersistentClass) classMappings.next(); //do somthing }

En Hibernate 5 inicializa metadatos como este

URL configFileURL = getResource(); //some method to get hold of the location of your hibernate.cfg.xml StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure(configFileURL).build(); Metadata metaData = new MetadataSources(standardRegistry).getMetadataBuilder().build();

Y use getEntityBindings () en los metadatos

Collection<PersistentClass> entityBindings = metadata.getEntityBindings(); Iterator<PersistentClass> iterator = entityBindings.iterator(); while (iterator.hasNext()) { PersistentClass persistentClass = iterator.next(); //do somthing }



Obtenga un objeto de PersisterCreationContext y luego intente esto: -

PersistentClass persistentClass = persisterCreationContext.getMetadata().getEntityBinding(className);

Por favor revise este link ( Ejemplo 3.8. Bootstrapping nativo - Poniéndolo todo junto ) para entender cómo obtener un registro estándar, metadatos y sessionFactory en Hibernate 5.x

Ahora que estábamos extrayendo metadatos de persisterCreationContext y ahora ya lo teníamos para poder obtener de inmediato el objeto PersistentClass requerido de cualquier entidad por

SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build(); PersistentClass persistentClass = metadata.getEntityBinding(className);


Publiqué en Broadleaf Commerce porque también necesitaban PersistentClass :

He estado trabajando con Hibernate 5 y algunos de estos cambios ... Para obtener metadatos, ahora use Serviceloader:

package org.broadleafcommerce.openadmin.server.dao; import org.hibernate.boot.SessionFactoryBuilder; import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.boot.spi.SessionFactoryBuilderFactory; import org.hibernate.boot.spi.SessionFactoryBuilderImplementor; public class EntityMetaData implements SessionFactoryBuilderFactory { private static final ThreadLocal<MetadataImplementor> meta = new ThreadLocal<>(); @Override public SessionFactoryBuilder getSessionFactoryBuilder(MetadataImplementor metadata, SessionFactoryBuilderImplementor defaultBuilder) { meta.set(metadata); return defaultBuilder; } public static MetadataImplementor getMeta() { return meta.get(); } }

Necesitarás el archivo:

/resources/META-INF/services/org.hibernate.boot.spi.SessionFactoryBuilderFactory

con el nombre completo de la clase, que en mi ejemplo es:

org.broadleafcommerce.openadmin.server.dao.EntityMetaData