Hibernate trabalha com vários bancos ao mesmo tempo?

Olá pessoal,

Estou iniciando no hibernate, na verdade é nhibernate pois minha plataforma é .net.

Estou começando um projeto de medio porte, onde tenho um bom tempo para concluílo, decidi que vou utlizar nhibernate pra aprender e porque o projeto se encaixa bem na estrutura orientação a objetos.

Agora um requisito importante neste projeto é que vou precisar trabalhar com mais de um database ao mesmo tempo. Tipo 2 bases sql e uma Oracle. Em certas situações vou precisar ler de um banco, aplicar regras de negócio e então persistir no outro.

Gostaria de saber se o hibernate suporta este tipo de requisito e como faço pra configurar isso.

Obrigado a todos.

Cara, uma vez eu vi uma palestra dum cara da Red Hat, ele disse que tem um projeto que faz isso. Eu não lembro o nome, não sei se está estável, não se está disponível, não lembro se era só um roadmap e muito menos se é só para a versão Java do Hibernate (o que eu suspeito).

Cara… em Java, funciona , como implementação da JPA. Agora, em .NET, as coisas mudam de figura. Não tenho muita certeza, mas acredito que, por ser uma implementação de JPA e JPA suportar mais de um banco, então o Hibernate (nhibernate) funciona com vários, sim.

Não sei como funciona o NHibernate, mas acredito que, pra isso, você tenha que criar objetos Session distintos, cada um com uma Configuration diferente.

Avisa se funcionar.

Olá

No Hibernate você cria SessionFactories. Cada SessionFactory tá ligada a um Banco. Basta que vc cria 2… N SF’s.

Para abstrair essa criação você poderia consultar o Padrão Factory.

Ah, este Link pode te dar uma luz. :smiley:

Veja se não é esse projeto que o Rubem comentou…

http://www.hibernate.org/414.html

Valeu pessoal.

LeoMarola é exatamente esse o problema, já entendi o mecanismo e fiz o factory, pra decidir qual o banco que eu quero usar. Vlw.

Neste caso eu teria então n sessions (uso o padrão singleton aqui tb) diferentes, 1 para cada banco que eu precisar usar, correto?

Uma outra dúvida, agora relacionada a performance. Eu preciso listar uma tabela de categorias, esta tabela terá milhares de registros, então vou fazer uma paginação. Ja vi que o hibernate tem métodos para cuidar disso que são o SetMaxResults e o SetFirstResult, minha dúvida é se só fazendo isso ele já entende que eu quero 20 de cada vez e vai no banco e só traz os 20, ou ele traz tudo e depois seleciona 20? Preciso configurar alguma outra coisa?

vlw.

Uma dúvida! Esse SessionFactory é do hibernate ou do JPA?

SessionFactory é hibernate. EntityManagerFactory é JPA.

O shards serve pra outra coisa. So pra poder usar bancos diferentes ao mesmo tempo basta configurar varias factories no seu hibernate.cfg.xml (ou no persistence.xml, pois jpa tambem oferece esse recurso)

outra coisa = banco de dados distribuídos

[quote=Paulo Silveira]SessionFactory é hibernate. EntityManagerFactory é JPA.

O shards serve pra outra coisa. So pra poder usar bancos diferentes ao mesmo tempo basta configurar varias factories no seu hibernate.cfg.xml (ou no persistence.xml, pois jpa tambem oferece esse recurso)[/quote]

adicionar as propriedades em runtime para os casos que mudam não seria mais interessante?

Alguém poderia postar um exemplo de como isso (multiplas session’s) no xml e a referência disso no código ?

[quote=Paulo Silveira]SessionFactory é hibernate. EntityManagerFactory é JPA.

O shards serve pra outra coisa. So pra poder usar bancos diferentes ao mesmo tempo basta configurar varias factories no seu hibernate.cfg.xml (ou no persistence.xml, pois jpa tambem oferece esse recurso)[/quote]
Certo. O problema é precisar de uma mesma transação pra persistir em mais de um banco. Não dá pra dá rollback nesse caso, ou dá?

Em minha aplicação eu chego a utilizar até dois bancos ao mesmo tempo, mas apenas quando irei fazer sincronia de dados entre eles.

No caso não utilizei nenhum SessionFactory de emf, apenas criei duas instâncias controláveis diferentes para cada banco.

Gostaria de saber o seguinte:
Tenho uma aplicação que N clientes irão utilizar. Cada cliente tem seu banco de dados. Na aplicação por um parâmetro eu sei que ele está acessando o cliente X ou Y. Como eu faço esta sessão do usuário utlizar o banco de dados X ou Y ?
E posso ter problemas tendo várias conexões para a mesma aplicação?

ranieripieper, três anos depois.
como vc resolveu esta questão?
De vários clientes e múltiplos bancos

Acredito que este link possa ajudar.

http://relation.to/Bloggers/MultitenancyInHibernate

Como eu uso isto com múltiplos schemas?
Desculpe a ignorância.

Olá Raiduster.

Acho que isso dá pra configurar lá no servidor de aplicação da mesma forma que configuraria outro banco.
Na hora de configurar o JDBC deve ter uma property pra indicar qual schema que sistema vai se conectar.

Falows t+

[quote=Paulo Silveira]SessionFactory é hibernate. EntityManagerFactory é JPA.

O shards serve pra outra coisa. So pra poder usar bancos diferentes ao mesmo tempo basta configurar varias factories no seu hibernate.cfg.xml (ou no persistence.xml, pois jpa tambem oferece esse recurso)[/quote]

Paulo, me tire uma dúvida a respeito desse assunto. Vc disse que EntityManagerFactory é JPA, não Hibernate, mas procurando aqui em casa, descobri um artigo da Mundo Java nro 17 entitulado “Fast Hibernate 3” e é usado um EntityManagerFactory no exemplo principal.