Como se conectar a vários bancos de dados no Hibernate

Eu sou novo para o Hibernate e experimentar coisas. Uma coisa que parece divertir tudo é como se conectar a bancos de dados diferentes? Eu tenho duas perguntas aqui:

  1. Se no mesmo aplicativo da web eu precisar conectar ao MySQL e Oracle, como faço isso?
  2. Eu estou usando o MySQL e tenho dois bancos de dados test1 e test2, como conectar e recuperar dados?

Eu li em um blog que podemos criar diferentes arquivos de configuração e fazê-lo. Eu tentei, mas não foi bem sucedida. Aqui está o que eu tentei:

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

Onde path é o caminho do arquivo de configuração. Este é o caminho certo?

    Usando mapeamentos de annotations como um exemplo:

     Configuration cfg1 = new AnnotationConfiguration(); cfg1.configure("/hibernate-oracle.cfg.xml"); cfg1.addAnnotatedClass(SomeClass.class); // mapped classs 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(); 

    Em seguida, use sf1 e sf2 para obter as sessões para cada database. Para arquivos de mapeamento, use apenas cfg.addClass em vez de addAnnotatedClass. Coloque os arquivos cfg.xml no pacote raiz neste caso. Aqueles terão o dialeto do Oracle ou MySQL e informações de conexão.

    Idealmente, você deve mover para o tipo de transação Distribuída do sistema [usando o Java Transaction Analyzer org.hibernate.transaction.JTATransactionFactory] nesse caso. Se você está rodando no JBoss App Server, você pode fazê-lo usando “Distributed Transaction Managers”. Você pode aprender mais sobre isso aqui .

    Não pode ser feito usando um arquivo de configuração de hibernação. Você precisa ter dois arquivos de configurações para isso.

    Para configurar o database mysql

     hibernate-mysql.cfg.xml 

    Para configurar o database oracle

     hibernate-oracle.cfg.xml 

    Em Details, o arquivo de configuração do mysql ser assim.

     < ?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">   false com.mysql.jdbc.Driver PASSWORD jdbc:mysql://localhost:3306/UR_DB_NAME USERNAME org.hibernate.dialect.MySQLDialect true    

    Em Details, o arquivo de configuração do oracle ser assim.

     < ?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">   false oracle.jdbc.driver.OracleDriver PASSWORD jdbc:oracle:thin:UR DB NAME USERNAME org.hibernate.dialect.Oracle10gDialect true    

    E o código deveria ser assim.

    configuração do mysql

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

    configuração do oracle sql

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

    Você pode conectar dois bancos de dados test1 e test2, recuperar dados com apenas um hibernate com alguns truques:

    • hibernate SQLQuery: apenas adicione o nome do database com a tabela “select * from test1.table1”, “select * from test2.table2”

    • persistência do hibernate: usando o esquema de chaves no xml do mapeamento de hibernação

    Você também pode adicionar class de mapeamento no arquivo configuration.xml

    Nota: isto é para annotations e para resources usam a palavra-chave resources em vez da class