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.
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.
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?
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 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?
[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á?
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?
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.
[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.