Top Posts

Desconto Exclusivo Livro Guia SCJP – Confira!!

Continue lendo

Mapeando Schemas diferentes Hibernate

Posted by camilolopes | Posted in Hibernate | Posted on 08-02-2012

2

olá Pessoal,

O post de hj veremos como ler uma tabela que está em um schema diferente do default do seu projeto usando o Hibernate. Será um post curto e bem prático.
Lets go…

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
Terá que ter o modelo da tabela e criar um bean no seu projeto Java e fazer os devidos mapeamento com base no modelo algo como:

@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 temos o pulo do gato, no atributo schema da anotação @Table onde informo qual schema usar. Por default é usado o que foi definido no arquivo hibernate.cfg.xml. Por falar nele precisamos atualizar com o novo bean ao <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 Usuario do schema ereaders, é o que está sendo lido, para isso, temos o seguinte dado na tabela Usuario:

 

Aqui nos temos os Bds:

DAO
Vou assumir que você já tem seu DAO implementado e inicializando as sessões corretamente, caso tenha dúvida verifique os posts sobre o assunto na categoria de Hibernate do blog. Criei uma classe que vai usar 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 usuario 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 terá que criar uma session com o user que tem permissão.

Vou ficando por aqui, espero que tenham gostado do post. Muito simples não é?
Abraços, see ya!!

Sincronizando dados WorkBench para MySQL

Posted by camilolopes | Posted in BD | Posted on 04-02-2011

6

olá Pessoal,

Neste post vou mostrar como sincronizar dados do WorkBench com o MySQL, assim as alterações realizadas no Workbench, causará impacto direto no banco, lembrando que esse recurso não fica de forma default por medida de segurança. O post será bem pequeno e objetivo. Vou considerar que você já tem o workbench instalado e uma base de dados no MySQL. Apesar de para uns parecer um posts para usuários básicos,  mas fazer modelagem de dados é algo que acontece com uma certa frequencia à depender do projeto. E saber usar uma ferramenta de modelagem  não é nada mal.

lets go…

Post Relacionado

Starting…

Mas, você deve está se perguntando e se eu alterar as tabelas no WorkBench estas alterações serão refletidas automaticamente no Banco de Dados? A resposta é não. Para que isso seja possível, precisamos informar ao WorkBench que ele deve passar as alterações para o BD.

O processo é bem semelhante ao que fizemos para importar do MySQL para o WorkBench. Basta ir em DataBase ==> Synchronize Model.

Siga as instruções da ferramenta, porém fique atento apenas para a penúltima tela, pois deve ser informado quais tabelas serão atualizadas e certifique-se de ignore aquelas que não sofreram alterações. Do contrário tudo que estiver no BD, será substituído e perdido. Veja, como ficou a nossa:

Espero que tenham gostado do post, vou ficando por aqui, e até próxima.

See ya! Abraços,