Olá, pessoal! No artigo de hoje, nós vamos ver como se lê uma tabela, que está em um schema diferente do default do seu projeto, usando o Hibernate. Este será um artigo curto e bem prático.
Contexto
A situação aqui é muito simples: precisamos ler uma tabela que está em outro schema do banco de dados via Hibernate. O que fazer?
Primeiro, você precisa ter o modelo da tabela e criar um bean no seu projeto Java, para, logo após, fazer os devidos mapeamento com base no modelo. Algo parecido com o código a seguir:
@Entity
@Table(name="Usuario", schema="ereaders")
public class Usuarios {
@Id
@GeneratedValue
private int id;
@Column
private String nome;
@Column
private String email;
//getters/setters omitidos
Observe onde está o truque: no atributo schema da anotação @Table, onde informo qual schema usar. Por padrão, costuma-se usar o que foi definido no arquivo hibernate.cfg.xml. Por falar nele, precisamos atualizá-lo com o novo bean:
<mapping class="br.com.camilolopes.bean.Usuarios"/>
Note: assuma que seu hibernate.cfg.xml está apontando para um BD diferente. Alguma coisa como:
<property name="hibernate.connection.url">jdbc:mysql://localhost/auge</property>
Testando
Podemos checkar se de fato o conteúdo da tabela “usuário”, do schema ereaders, é o que está sendo lido. Para isso, temos o seguinte dado na tabela:

Aqui, nós temos os Bds:
DAO
Vou assumir que você já tem o seu DAO implementado e inicializando as sessões corretamente. Eu criei uma classe que vai usar o HQL para fazer um select na tabela e, em seguida, imprimir:
public class UsuariosDAO extends DAO {
public List getListUsuarios(){
begin();
Session session = getSession();
String hql = "select us.email from Usuarios us";
Query query = session.createQuery(hql);
List list = query.list();
return list;
}
}
Na classe main,vamos colocar isso só para ver o resultado:
public static void main(String[] args) {
UsuariosDAO usuariosDAO = new UsuariosDAO();
List<String> listUsuarios = usuariosDAO.getListUsuarios();
for (String usuarios : listUsuarios) {
System.out.println(usuarios);
}
}
Resultado

Enfim, temos dados de uma tabela em outro schema. A linha acima de camilo@ é que habilitei o sql_show no arquivo de configuração do hibernate.cfg.xml.
Problema
Como tudo não são flores, um problema aqui é que você não pode esquecer que o usuário informado no hibernate.cfg.xml deve ter permissão ao menos de leitura das tabelas no outro esquema. Do contrário, verá exceções na tela com a mensagem “permission denied”. Se o usuário for diferente, você terá que criar uma session com o user que tem permissão.
Vou ficando por aqui e espero que tenham gostado do artigo. Muito simples não é?







