Como acessar dois Bancos diferentes com o hibernate?

Olá pessoal, td bem?

Minha dúvida é simples…

Tenho uma aplicação que precisa acessar dois bancos diferentes

e tô querendo usar o hiberante para isso.

Alguém tem alguma dica??

Valeu, espero respostas! :wink:

Possua duas SessionFactories diferentes configuradas para acessar cada banco:

Properties p = new Properties();
p.setProperty( "hibernate.connection.url", "jdbc:jtds:sqlserver://127.0.0.1:1818;DatabaseName=" + databaseName );
p.setProperty( "hibernate.connection.username", "user" );
p.setProperty( "hibernate.connection.password", "pass" );

Configuration conf = new Configuration().setProperties( p );
SessionFactory factory = conf.configure().buildSessionFactory();

Ou quis dizer que deseja que cada query busque em dois bancos diferentes de maneira transparente?

Nesse caso se eu criar dois arquivos hibernate.cfg, pelo menos um deles eu terei que especificar no código, certo??

Não entendi a questão da querie!!!

Quer dizer que se eu quizer usar apenas uma pesquisa em outro banco não seria necessário criar outra sessionFactory??

Valeu por me responder LIPE.

Não, você pode ter dois hibernate.cfg com nomes diferentes com as outras configurações todas. Por exemplo:
hibernate_banco_um.xml
hibernate_banco_dois.xml

Então basta mudar a linha:

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

Para:

SessionFactory factory = conf.configure( "hibernate_banco_um.xml" ).buildSessionFactory();

Quanto à minha pergunta, explico apresentando dois cenários:

  1. Algumas queries são feitas no banco A e outras no banco B, que por exemplo possui apenas algumas tabelas de apoio.

  2. Todas as queries devem buscar resultados nos dois bancos, por exemplo session.createCriteria( Pessoa.class ).list() deve buscar a tabela T_PESSOAS no banco A e B.

Valeu pela ajuda, acho que agora eu saquei como é que funciona!

Olá Felipe, preciso exatamente disto, ter entidades em um banco e entidades em outro.

Ex:
Entidade Carro no banco DataCarro
Entidade Roda no banco DataRoda

Gostaria ainda de chamar os objetos da seguinte forma:


Carro c = (Carro) sessionDataCarro.load(Carro.class, id);

c.getRodaS(); // retorna as rodas do carro da 'sessionDataRoda'

Isto é possível?

Minha necessidade é dada pois uma base é de entidades de consulta, um erp que não posso intervir, do qual extraio dados e manipulo em uma base de entidades de negócio.