Gostaria de saber se existe uma forma intuitiva/amigável de utilizar várias conexões com um mesmo banco de dados (cujo schema se diferenciem) no Hibernate? Digo, utilizar sem a necessidade de replicação de Beans (DAO, HibernateProperties e SessionFactory)? Em outras palavras, a aplicação necessita se conectar com vários Schemas de um mesmo DataSource, sendo que todos os schemas conterão as mesmas estruturas de tabelas/campos. Existe algo p/ mudar o schema no DAO em tempo de execução ou algo do tipo ?
Não… No meu caso é um único banco de dados com vários schemas! Sendo que cada schema deste mesmo banco terá a mesma estrutura de tabelas! Imagina que tem um único banco de dados e dentro dele tem vários schemas, onde para acessar a tabela seria algo assim: .
! Entendeu !?
Meu problema Mauricio, é o fato de replicações de informações (mapeamentos/properties/etc.) para acessar cada schema no banco!
P.S.: No Hibernate mapeia-se estes schemas no hbm.xml ou no hibernateConfig.
[]'s
Mauricio_Linhares
Ah, cada schema vai ter tabelas diferentes?
morais
Não… não…
Cada schema terá estrutura de tabelas/campos iguais, com conteúdos diferentes! Seria algo assim… cada cliente terá seu schema com conteúdo relacionado ao mesmo.
Mauricio_Linhares
Aaaaaaaaaaaahhhhhhhhhhh!
Agora a coisa mudou de figura
Veja só, o modo mais simples é você implementar um ConnectionProvider (do Hibernate) que retorne a conexão para o schema do usuário que está atualmente fazendo a requisição.
Você pode, por exemplo, colocar o usuário em uma variável ThreadLocal e lá na hora que você for retornar uma conexão pelo ConnectionProvider verificar qual o usuario que está nessa ThreadLocal e só então retornar a edição correta.
morais
Hummm… Boa… Já uma luz… Vou estudar melhor a respeito!
Obrigado kra…
[]'s
casmeiron
Na hora que o usuário realizar o login na aplicação, pegue o schema que ele pertence e salve (client voce salva em algum atributo, server voce pode colocar essa informação na sessão), toda vez que tu for abrir uma session do hibernate, você pega o schema dele, abre uma conexão e passa para sessão do hibernate utilizar, assim você faz isso apenas 1 vez.
morais
Olá casmeiron,
Valeu pela ajuda. O único problema é que eu não abro e gerencio a sessão do hibernate. Quem faz isso e gerencia-o é o Spring. Estou utilizando String c/ Hibernate. Pesquisei algo para setar schemas, em tempo de execução, no Spring/hibernate e não encontrei nada.
Quem sabe a sugestão do Mauricio (ConnectionProvider) possa me ajudar. Tenho que estudá-la ainda p/ ver se dá p/ utilizar junto com o Spring.
Desde já valeu pela força! Se tiver outra sugestão pode postar aí…
[]'s
K
kubanacan
Estou com o mesmo problema e não sei como resolver… estou começando com Hibernate agora…
minha pequena aplicacao funciona da seguinte forma.
O usuário qnd loga no sistema ele diz qual empresa ele pertence, o login e senha.
Eu tenho uma tabela de empresas no Schema publico.
Nessa tabela tem um campo que é o nome do Schema… exemplo
tabela empresa
|nome| esquema|
| Guj | sguj |
| Uol | suol |
eu tenho um schema no BD com nome de sguj, suol, etc.
qnd o usuário logar eu vejo qual esquema ele ta e acesso a tabela de usuario dentro do esquema correto… existem outras tabelas dentro do schema, mas todos schemas seguem a mesma estrutura. Como fazer o HBM do Usuario acessar o esquema correto??
Vlw pela força!
Abraços
Rafael.bnc
kubanacan, gostaria de saber se você já conseguiu resolver esse seu problema? Pois estou passando por um muito parecido (para não dizer igual hehehe).
kubanacan:
Estou com o mesmo problema e não sei como resolver… estou começando com Hibernate agora…
minha pequena aplicacao funciona da seguinte forma.
O usuário qnd loga no sistema ele diz qual empresa ele pertence, o login e senha.
Eu tenho uma tabela de empresas no Schema publico.
Nessa tabela tem um campo que é o nome do Schema… exemplo
tabela empresa
|nome| esquema|
| Guj | sguj |
| Uol | suol |
eu tenho um schema no BD com nome de sguj, suol, etc.
qnd o usuário logar eu vejo qual esquema ele ta e acesso a tabela de usuario dentro do esquema correto… existem outras tabelas dentro do schema, mas todos schemas seguem a mesma estrutura. Como fazer o HBM do Usuario acessar o esquema correto??