Pessoal, gostaria da ajuda de vocês para entender o seguinte problema:
Classes mapeadas:
/**
- The persistent class for the tb_area database table.
*/
@Entity
@Table(name=“tb_area”)
public class TbArea implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="id_area")
private Integer idArea;
@Column(name="nm_area", nullable=false, length=50)
private String nmArea;
@Column(name="sg_area", nullable=false, length=10)
private String sgArea;
//bi-directional many-to-one association to TbArea
@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinColumn(name="id_area_pai")
private TbArea tbArea;
//bi-directional many-to-one association to TbArea
@OneToMany(mappedBy="tbArea", cascade={CascadeType.ALL})
private List<TbArea> tbAreas;
//bi-directional many-to-one association to TbOrganizacao
@ManyToOne(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinColumn(name="id_organizacao")
private TbOrganizacao tbOrganizacao;
public TbArea() {
}
public Integer getIdArea() {
return this.idArea;
}
public void setIdArea(Integer idArea) {
this.idArea = idArea;
}
public String getNmArea() {
return this.nmArea;
}
public void setNmArea(String nmArea) {
this.nmArea = nmArea;
}
public String getSgArea() {
return this.sgArea;
}
public void setSgArea(String sgArea) {
this.sgArea = sgArea;
}
public TbArea getTbArea() {
return this.tbArea;
}
public void setTbArea(TbArea tbArea) {
this.tbArea = tbArea;
}
public List<TbArea> getTbAreas() {
return this.tbAreas;
}
public void setTbAreas(List<TbArea> tbAreas) {
this.tbAreas = tbAreas;
}
public TbOrganizacao getTbOrganizacao() {
return this.tbOrganizacao;
}
public void setTbOrganizacao(TbOrganizacao tbOrganizacao) {
this.tbOrganizacao = tbOrganizacao;
}
}
e
/**
- The persistent class for the tb_organizacao database table.
*/
@Entity
@Table(name=“tb_organizacao”)
public class TbOrganizacao implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="id_organizacao", unique=true, nullable=false)
private int idOrganizacao;
@Column(name="nm_organizacao", nullable=false, length=50)
private String nmOrganizacao;
//bi-directional many-to-one association to TbArea
@OneToMany(mappedBy="tbOrganizacao")
private List<TbArea> tbAreas;
public TbOrganizacao() {
}
public int getIdOrganizacao() {
return this.idOrganizacao;
}
public void setIdOrganizacao(int idOrganizacao) {
this.idOrganizacao = idOrganizacao;
}
public String getNmOrganizacao() {
return this.nmOrganizacao;
}
public void setNmOrganizacao(String nmOrganizacao) {
this.nmOrganizacao = nmOrganizacao;
}
public List<TbArea> getTbAreas() {
return this.tbAreas;
}
public void setTbAreas(List<TbArea> tbAreas) {
this.tbAreas = tbAreas;
}
}
Executo a seguinte query:
final String sqlInicial = “select new spread.saf.entidades.RsManterArea(a.nmArea,a.tbArea,a.tbOrganizacao)from TbArea a”;
Queria pegar todos os dados que estão na TbArea, no entando observo o console e a seguinte consulta é gerada:
SELECT t0.nm_area, t1.id_area, t1.nm_area, t1.sg_area, t1.id_organizacao, t1.id_area_pai, t2.id_organizacao, t2.nm_organizacao FROM tb_area t0 LEFT OUTER JOIN tb_area t1 ON (t1.id_area = t0.id_area_pai) LEFT OUTER JOIN tb_organizacao t2 ON (t2.id_organizacao = t0.id_organizacao)
Minha dúvida: Por que é gerado os left outer joins, sendo que solicitei apenas os dados da TbArea? Ou seja não precisava fazer join com a TbOrganizacao e nem o join com a própria TbArea que possui um auto relacionamento.
Obrigado!