JPA EntityManager问题

在项目开发中,发现员工实体中包含上级领导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=?,





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值