Olá pessoal,
sou iniciante em Hibernate e gostaria que vocês dessem uma olhada no esquema abaixo e se puderem me ajudarem a chegar numa técnica ou forma de melhorar o codigo da minha aplicação de exemplo.
Tenho uma entidade Pais, Estado e Cidade.
Cada uma dessas entidades tem os seguintes mapeamentos:
Pais.hbm.xml
<hibernate-mapping>
<class name = "territorio.model.entity.Pais" table="pais">
<id name = "id" type = "java.lang.Integer">
<column name="idPais" />
<generator class="native" />
</id>
<property name="nome" type="string">
<column name="nomePais" />
</property>
<property name="sigla" type="string">
<column name="siglaPais" />
</property>
</class>
</hibernate-mapping>
Estado.hbm.xml
<hibernate-mapping>
<class name = "territorio.model.entity.Estado" table="estado">
<id name = "id" type = "java.lang.Integer">
<column name="idEstado" />
<generator class="native" />
</id>
<property name="nome" type="string">
<column name="nomeEstado" />
</property>
<property name="sigla" type="string">
<column name="siglaEstado" />
</property>
<many-to-one
class = "territorio.model.entity.Pais"
name = "pais"
column="idPais"
/>
</class>
</hibernate-mapping>
E meu arquivo Hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<property name = "connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name = "connection.url">
jdbc:mysql://localhost:3306/appexample
</property>
<property name = "connection.username">
root
</property>
<property name = "connection.password">
</property>
<property name = "dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name = "show_sql">
true
</property>
<mapping resource="territorio/model/repository/hibernate/hbm/Pais.hbm.xml" />
<mapping resource="territorio/model/repository/hibernate/hbm/Estado.hbm.xml" />
</session-factory>
</hibernate-configuration>
Fiz a Classe HibernateUtil, que é responsável por fornecer a session, e as Classes PaisDAO e EstadoDAO que funcionam corretamente.
Minha dúvida é em relação as classes de serviço, que são responsável por chamar os DAOs e retornar as Entidades.
Fiz um serviço para encontrar um determinado estado, no entanto tive que chamar o serviço para carregar o pais e agregar-lo junto ao objeto Estado que será retornado:
public Estado findByIdEstadoService(Estado estado) throws HibernateException
{
Estado e;
try
{
e = estadoDAO.findById(estado);
e.setPais(paisService.findByIdService(estado.getPais());
return e;
} catch (HibernateException e)
{
throw new HibernateException(e.getMessage() + " - Erro ao procurar pais");
}
}
Isso parece meio feio, já que se precisar recuperar a lista de todos os estados cadastrados, dessa forma teria que percorrer a lista e procurar no paisService cada pais de cada elemento estado da lista.
Gostaria de ver a sugestão dos colegas em formas ou técnicas melhor para recuperar o Pais de um estado sem ter que fazer isso da forma como está acima.
Obrigado