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

Soy nuevo en Hibernate y estoy 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 conectarme y recuperar datos?

Leí en un blog que podemos crear diferentes archivos de configuración y hacerlo. Lo intenté pero no fue exitoso. 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?

Uso de asignaciones de anotaciones 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 mapear archivos, simplemente use cfg.addClass en lugar de addAnnotatedClass. Coloque los archivos cfg.xml en el paquete raíz en este caso. Esos tendrán el dialecto de Oracle o MySQL y la información de conexión.

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 utilizando “Administradores de transacciones distribuidas”. Puedes aprender más sobre esto aquí .

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

Para configurar la base de datos mysql

 hibernate-mysql.cfg.xml 

Para configurar la base de datos oracle

 hibernate-oracle.cfg.xml 

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

     false com.mysql.jdbc.Driver PASSWORD jdbc:mysql://localhost:3306/UR_DB_NAME USERNAME org.hibernate.dialect.MySQLDialect true    

En Detalles, el archivo de configuración de Oracle debe ser así.

     false oracle.jdbc.driver.OracleDriver PASSWORD jdbc:oracle:thin:UR DB NAME USERNAME org.hibernate.dialect.Oracle10gDialect true    

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

configuración mysql

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

configuración 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 un hibernate con algunos trucos:

  • Hibernate SQLQuery: simplemente agregue el nombre de la base de datos con la tabla “select * from test1.table1”, “select * from test2.table2”

  • persistencia de hibernación: utilizando el esquema de clave en el mapeo de hibernación xml

También puede Agregar clase de asignación en el archivo configuration.xml

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