So here is my problem:
I have 2 classes Person and department.
Person :
@Entity
public class Personne
{
@Id
private Long id;
private String name;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="dept_id")
@Fetch(FetchMode.JOIN)
private Departement dept;
// getter & setter
}
Department :
@Entity
public class Departement
{
@Id
private Long id;
private String name;
// getter & setter
}
I want to select only departement of a personn with a criteria query so i use Projection:
My Code :
Criteria crt = session.createCriteria(Personne.class);
crt.createAlias("dept", "d",JoinType.LEFT_OUTER_JOIN);
crt.setProjection(Projections.projectionList().add(Projections.property("dept")));
crt.add(Restrictions.eq("id", 1L));
Above query works well but i get 2 queries whereas i expect only 1 since my fetch type is eager.
Log :
[use] 2017-08-16 16:23:07,113 DEBUG [main] SqlStatementLogger.logStatement(109) | select this_.dept_id as y0_ from Personne this_ left outer join Departement d1_ on this_.dept_id=d1_.id where this_.id=?
[use] 2017-08-16 16:23:07,119 DEBUG [main] SqlStatementLogger.logStatement(109) | select departemen0_.id as id1_0_0_, departemen0_.name as name2_0_0_ from Departement departemen0_ where departemen0_.id=?
it seems that projection of entity fires n+1 select. Does that make sense?
can anyone help me with this?
Thanks