在项目开发中,发现员工实体中包含上级领导leader(可为空),和所在商户merchant,若要查找单独一条员工信息,此时存在问题,若leader不为空,并不影响记录结果,可通过leader获取到merchant,但无法直接通过该员工获取merchant;但若leader为空,此时可直接获取商户merchant。考虑到若该leader不是关联本员工类,而是关联类C,同时C与B也有关系,此时查询结果又会是怎样的?
实体A
class A{
@Id
private String id;
private String name;
@ManyToOne(cascade={CascadeType.MERGE})
@JoinColumn(name="merId")
private B merchant;
...
@ManyToOne(cascade={CascadeType.MERGE})
@JoinColumn(name="leaderId")
private A leader;
}
实体B
class B{
@Id
private String id;
private String name;
}
此时需要查询A中的一条记录,则通过Action-》service-》DAO层,传递参数为(A.class,id)调用到EntityManager的find方法,执行的sql语句为:
select * from A x left outer join A y x.leaderId=y.id left outer join B z y.merId=z.id where x.id=?,
此时查询返回的结果无法显示关联的B的内容,只能通过关联的leader关联到B;
实际的查询语句应该是:select * from A x left outer join A y x.leaderId=y.id left outer join B z x.merId=z.id where x.id=?,