utiliza tutorial tablas soporta qué propiedades por persistencia medio mapear los facilita ejemplo cuando con hibernate database

tutorial - Cómo conectarse a múltiples bases de datos en Hibernate



por medio de qué soporta y facilita spring los dao cuando se utiliza hibernate (5)

Idealmente, debería pasar al tipo de sistema de transacción distribuida [utilizando Java Transaction Analyzer org.hibernate.transaction.JTATransactionFactory] en este caso. Si está ejecutando en JBoss App Server, puede hacerlo usando "Distributed Transaction Managers". Puedes aprender más sobre esto here .

Soy nueva abeja de Hibernate y probando cosas. ¿Una cosa que parece divertir a todos es cómo conectarse a diferentes bases de datos? Tengo dos preguntas aquí:

  1. Si en la misma aplicación web necesito conectarme a MySQL y Oracle, ¿cómo lo hago?
  2. Estoy usando MySQL y tengo dos bases de datos test1 y test2, ¿cómo conectar y recuperar datos?

He leído en un blog que podemos crear diferentes archivos de configuración y hacerlo. Lo probé pero no tuve éxito. Esto es lo que intenté:

SessionFactory sf = (SessionFactory) new Configuration().configure(path);

Donde ruta es la ruta del archivo de configuración. ¿Es este el camino correcto?


No se puede hacer usando un archivo de configuración de hibernación. Necesitas tener dos archivos de configuraciones para ello.

Para configurar la base de datos mysql

hibernate-mysql.cfg.xml

Configurar la base de datos oracle

hibernate-oracle.cfg.xml

En Detalles, el archivo de configuración de mysql será así.

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.bytecode.use_reflection_optimizer">false</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">PASSWORD</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/UR_DB_NAME</property> <property name="hibernate.connection.username">USERNAME</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <mapping class="domain.EmployeeMysql"></mapping> </session-factory> </hibernate-configuration>

En Detalles, el archivo de configuración de oracle será así.

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.bytecode.use_reflection_optimizer">false</property> <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="hibernate.connection.password">PASSWORD</property> <property name="hibernate.connection.url">jdbc:oracle:thin:UR DB NAME</property> <property name="hibernate.connection.username">USERNAME</property> <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> <property name="show_sql">true</property> <mapping class="domain.EmployeeOracleSql"></mapping> </session-factory> </hibernate-configuration>

Y el código debería ser así.

configuración de mysql

private static SessionFactory sessionAnnotationFactory; sessionAnnotationFactory = new Configuration().configure("hibernate-mysql.cfg.xml").buildSessionFactory(); Session session = sessionAnnotationFactory.openSession();

configuración de Oracle SQL

sessionAnnotationFactory = new Configuration().configure("hibernate-oracle.cfg.xml").buildSessionFactory(); Session session = sessionAnnotationFactory.openSession()


Puede conectar dos bases de datos test1 y test2, recuperar datos con solo una hibernación con algunos trucos:

  • hibernar SQLQuery: simplemente agregue el nombre de la base de datos con la tabla "seleccionar * de test1.table1", "seleccionar * de test2.table2"

  • persistencia de hibernación: usando el esquema de clave en el xml de asignación de hibernación

    <class name="Table1Class" table="table1" schema="test1"> <class name="Table2Class" table="table2" schema="test2">


También puede agregar clase de mapeo en el archivo configuration.xml

Nota: esto es para anotaciones y para recursos use la palabra clave recursos en lugar de la clase

<mapping class="packageName.classNmae1"/> <mapping class="packageName.classNmae2"/>


Usando mapeos de anotación como ejemplo:

Configuration cfg1 = new AnnotationConfiguration(); cfg1.configure("/hibernate-oracle.cfg.xml"); cfg1.addAnnotatedClass(SomeClass.class); // mapped classes cfg1.addAnnotatedClass(SomeOtherClass.class); SessionFactory sf1 = cfg1.buildSessionFactory(); Configuration cfg2 = new AnnotationConfiguration(); cfg2.configure("/hibernate-mysql.cfg.xml"); cfg2.addAnnotatedClass(SomeClass.class); // could be the same or different than above cfg2.addAnnotatedClass(SomeOtherClass.class); SessionFactory sf2 = cfg2.buildSessionFactory();

Luego use sf1 y sf2 para obtener las sesiones para cada base de datos. Para los archivos de mapeo, solo usa cfg.addClass en lugar de addAnnotatedClass. Coloque los archivos cfg.xml en el paquete raíz en este caso. Aquellos tendrán el dialecto de Oracle o MySQL y la información de conexión.