Olá pessoal, fiz um método para buscar todas cidades relacionadas a tal estado. Passo o id do estado, e então ele me retorna todas as cidades que tem esse id de estado.
Porém com um teste rápido eu vi que ele está dando 2 selects.. um na table de cidade e outra em estado.
Gostaria de saber o porque de não estar dando inner join, e no caso só fazer 1 select? Segue o código:public class CidadeDAO {
private final DAO<Cidade> dao ;
private EntityManager em ;
public CidadeDAO(EntityManager em) {
dao = new DAO<Cidade>(em, Cidade.class) ;
this.em = em ;
}
@SuppressWarnings("unchecked")
public List<Cidade> listaCidadesDoEstado(Integer idEstado) {
String jpql = "select c from Cidade c where c.estado.id = :pIdEstado" ;
Query query = this.em.createQuery(jpql).setParameter("pIdEstado", idEstado) ;
return query.getResultList() ;
}
}
public class TestaListaCidadesPorEstado {
public static void main(String[] args) {
EntityManager em = new JPAUtil().getEntityManager() ;
CidadeDAO dao = new CidadeDAO(em) ;
List<Cidade> listaCidades = dao.listaCidadesDoEstado(1) ;
for (Cidade c : listaCidades) {
System.out.println(c.getNome());
}
}
}
Hibernate:
select
cidade0_.id as id2_,
cidade0_.estado_id as estado3_2_,
cidade0_.nome as nome2_
from
Cidade cidade0_
where
cidade0_.estado_id=?
Hibernate:
select
estado0_.id as id3_0_,
estado0_.nome as nome3_0_
from
Estado estado0_
where
estado0_.id=?
sobral
tagua
asa sul
@Entity
public class Cidade {
@Id
@GeneratedValue
private Integer id ;
private String nome ;
@ManyToOne
private Estado estado ; //gas
@Entity
public class Estado {
@Id
@GeneratedValue
private Integer id ;
private String nome ; //gas
Grato!