Olá, pessoal! No artigo de hoje vou mostrar como mapear duas tabelas em um bean do Hibernate. Trago esse assunto porque, acredito eu, você não quer criar um bean para cada tabela, já que precisa apenas ler algumas colunas de uma e outra, mas quer tudo no mesmo bean.
Vamos supor que você tem o seguinte cenário:

Você precisa ler informações tanto da tabela infraestrutura, quanto da logicalserserver e ainda ter tudo em um só bean.
Vou fazer um DAO bem simples, apenas para focarmos mais no proposito do artigo. Estou considerando que você já conhece o Hibernate e, portanto, toda aquela parte de configuração e .jars do framework não serão apresentados. Caso tenha dúvida como fazer, veja outros artigos antigos a esse respeito.
A seguir, temos o nosso projeto:

A seguir temos nosso DAO:
public class DAO {
private static final ThreadLocal threadLocal = new ThreadLocal();
private static final SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
public static Session getSession(){
Session session = (Session) threadLocal.get();
if (session==null) {
session = sessionFactory.openSession();
}
return session ;
}
public void begin(){
getSession().getTransaction().begin();
}
public void commit(){
getSession().getTransaction().commit();
}
public void rollback(){
getSession().getTransaction().rollback();
}
}
Agora temos o nosso bean, onde mapeamos com as duas tabelas:
@Entity
@Table(name="infraestrutura")
@SecondaryTable(name="logicalserver")
public class InfraServer {
@Id
@Column(name="infra_id")
private int infraId;
@Column(name="name_infra")
private String nameInfra;
@Column(name="nameServer",table="logicalserver")
private String nameServer;
public int getInfraId() {
return infraId;
}
public void setInfraId(int infraId) {
this.infraId = infraId;
}
public String getNameInfra() {
return nameInfra;
}
public void setNameInfra(String nameInfra) {
this.nameInfra = nameInfra;
}
public String getNameServer() {
return nameServer;
}
public void setNameServer(String nameServer) {
this.nameServer = nameServer;
}
}
@SecondaryTable: Essa é a anotação que possibilita mapearmos uma segunda tabela para o mesmo bean. Nada de especial nela, apenas informamos o nome da tabela que desejamos:
@SecondaryTable(name="logicalserver")
Agora precisamos informar qual coluna pertence a segunda tabela. Quando não informado, o Hibernate vai considerar sempre o mapeamento que temos para @Table.
@Column(name="nameServer",table="logicalserver")
private String nameServer;
Crie uma classe com o método main, que vai ler os dados da tabela e imprimi-los. Nada de especial; apenas um simples HQL:
public class MainDAO extends DAO{
public static void main(String[] args) {
List<InfraServer> retrieve = retrieve();
for (InfraServer infraServer : retrieve) {
System.out.println(infraServer.getNameInfra());
System.out.println(infraServer.getNameServer());
} }
public static List<InfraServer> retrieve(){
Query query = getSession().createQuery("from InfraServer");
return query.list();
}
Ao rodar obtemos o seguinte resultado:

Respectivamente, temos a tabela logicalserver, infraestrutura e o console do Eclipse.
É isso ai, pessoal! Bem simples fazer um bean mapear duas tabelas, não? No próximo artigo veremos como fazer isso para mais de uma tabela a partir do mesmo bean.







