Olá BMuniz,
Se preferir, você pode configurar dinamicamente somente algumas partes do arquivo “hibernate.cfg.xml”.
Fiz um exemplinho rápido. Criei 2 bancos iguais, somente para testar, com 2 tabelas, pessoa e dependente.
Primeiro eu acesso o banco javatest, fecho a conexão, e depois acesso o banco javatest2.
Dá uma olhada no exemplo que fiz…
Arqvuivo hibernate.cfg.xml (não contém nome do servidor, nome do banco, nem login e nem senha, tudo configurado dinamicamente)
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.format_sql">false</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">180</property>
<property name="hibernate.c3p0.idle_test_period">100</property>
<mapping class="br.com.teste.entity.Pessoa"/>
<mapping class="br.com.teste.entity.Dependente"/>
</session-factory>
</hibernate-configuration>
HibernateUtil
public class HibernateUtil {
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private static SessionFactory sessionFactory = null;
public static Session openSession(String servidor, String base, String login, String senha) {
Configuration config = new AnnotationConfiguration().configure("hibernate.cfg.xml");
config.setProperty("hibernate.connection.url", "jdbc:mysql://" + servidor + ":3306/" + base);
config.setProperty("hibernate.connection.username", login);
config.setProperty("hibernate.connection.password", senha);
sessionFactory = config.buildSessionFactory();
threadLocal.set(sessionFactory.openSession());
return threadLocal.get();
}
public static void closeCurrentSession() {
threadLocal.get().close();
threadLocal.set(null);
}
public static Session getCurrentSession() {
return threadLocal.get();
}
}
Main do programa
public static void main(String[] args) {
Session session = HibernateUtil.openSession("localhost", "javatest", "marcelo", "suzuki");
List<Pessoa> pessoaList = session.createCriteria(Pessoa.class).list();
for (Pessoa pessoa : pessoaList) {
System.out.println(pessoa.getNome());
}
HibernateUtil.closeCurrentSession();
session = HibernateUtil.openSession("localhost", "javatest2", "marcelo", "suzuki");
pessoaList = session.createCriteria(Pessoa.class).list();
for (Pessoa pessoa : pessoaList) {
System.out.println(pessoa.getNome());
}
HibernateUtil.closeCurrentSession();
}