Dúvida - Hibernate [URGENTE]!

10 respostas
morais

Galera,

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 ?

Alguém poderia me dar uma força nisso ?

[]'s

10 Respostas

Mauricio_Linhares

Supondo que eu entendi o seu problema, o que você tem é um cluster de bancos de dados?

Se for, veja isso -> http://c-jdbc.objectweb.org/

morais

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 :smiley:

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. :frowning:

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

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??

Vlw pela força!

Abraços

Criado 11 de junho de 2007
Ultima resposta 14 de abr. de 2008
Respostas 10
Participantes 5