Alterar base de dados dinamicamente (SessionFactory) Hibernate

3 respostas
P

Olá pessoal,

estou com o seguinte problema:

no meu projeto, tomamos a seguinte decisão de implementação: para cada nova Fazenda (é um sistema de gerenciamento agropecuário) cadastrada no sistema, será criada uma base de dados distinta. Por exemplo, a fazenda cujo id é 1 terá uma base de dados independente “faz01”.

Na página principal do sistema, o usuário seleciona com qual fazenda deseja trabalhar.

Assim sendo, preciso fazer com que seja criada uma sessão para um determinado banco de dados dinamicamente. Ou seja, se o usuário deseja trabalhar com a Fazenda 01, a sessão que deverá ser criada terá as configurações de acesso à base de dados “faz01”.

Será que fui claro? Caso precisem de mais informações, é só comunicar.

Agradeço desde já a atenção dispensada.

Até mais,
Paulo Júnior.

3 Respostas

P

Olá pessoal,

visto que já postei este tópico há alguns dias e não obtive resposta, e que também já havia postado ele em outros fóruns no Brasil e também não obtive respostas, creio que devo postá-lo em fórum no exterior, provavelmente do próprio Hibernate.

Queria pedir a ajuda de vocês para poder traduzir este tópico, pois não tenho habilidade no Inglês. Desta forma, poderei postá-lo lá fora.

Agradeço desde já,
Paulo Júnior.

rodrigo_corinthians
Cara no Hibernate não vai ter como vc alterar a base dinamicamente faz assim cria uma classe Singleton que tem um map onde o key corresponderá ao nome da database e o value será o SessionFactory, já utilizei uma vez numa aplicação onde conectava em 3 Schemas diferentes, o código fica mais ou menos assim:
public class SingletonSessionFactory {
 private static SingletonSessionFactory instance = new SingletonSessionFactory();
 private Map<String, SessionFactory> map;
 private SingletonSessionFactory() {
  map = new HashMap()<String, SessionFactory>;
 }
 public static SingletonSessionFactory getInstance() {
  return instance;
 }

 public SessionFactory getSessionFactory(String base) {
  if(map.containsKey(base)){
   return map.get(base);
  }
  return map.put(base, MinhaClasseHibernateUtil.getSession());
 }
}
P

Olá Rodrigo,

só poderia ser corinthiano mesmo, rsrs (tb sou corinthiano). Muito obrigado pela sua resposta. Creio que sua solução de encaixará perfeitamente ao meu sistema.

Obrigado mais uma vez,
Paulo Júnior.

Criado 1 de fevereiro de 2008
Ultima resposta 6 de fev. de 2008
Respostas 3
Participantes 2