通过命名查询JPA2.0获取时数据不完整
我有一个名为RequestDetail的实体,并完成了关联和映射,如下代码段所示:通过命名查询JPA2.0获取时数据不完整,jpa,Jpa,我有一个名为RequestDetail的实体,并完成了关联和映射,如下代码段所示: @ManyToOne @JoinColumn(name="STATUS_C") private StatusCode statusCode; //bi-directional many-to-one association to RequestAddressDetail @OneToMany(mappedBy="requestDetail") private List<RequestAddressDeta
@ManyToOne
@JoinColumn(name="STATUS_C")
private StatusCode statusCode;
//bi-directional many-to-one association to RequestAddressDetail
@OneToMany(mappedBy="requestDetail")
private List<RequestAddressDetail> addressDetails;
@ManyToOne
@JoinColumn(name=“STATUS\u C”)
私有状态码状态码;
//到RequestAddressDetail的双向多对一关联
@OneToMany(mappedBy=“requestDetail”)
私人名单地址详情;
我创建了以下命名查询,以获取基于地址的详细信息
TypedQuery<RequestDetail> query = em.createQuery( "SELECT t FROM RequestDetail t" +
" LEFT JOIN t.employeeDetail e " +
" LEFT JOIN t.addressDetails ao " +
" LEFT JOIN t.addressDetails ad " +
" WHERE (e.employeeI IN ( :employeeIds ) ) AND " +
" (ao.postI = :postO AND ao.addressTypeC = :addressTypeO " +
" AND ad.postI = :PostD AND ad.addressTypeC = :addressTypeD )" ,
RequestDetail.class );
TypedQuery query=em.createQuery(“从RequestDetail t中选择t”+
“左连接t.employeeDetail e”+
“左连接t.addressDetails ao”+
“左加入t.addressDetails广告”+
“其中(例如(:employeeid)中的employeeI)和”+
“(ao.postI=:postO和ao.addressTypeC=:addressTypeO”+
“和ad.postI=:PostD和ad.addressTypeC=:addressTypeD)”,
RequestDetail.class);
然而,当我调用query.getResultList()时,它只提供RequestDetail实体的数据,而不提供我在该实体中提到的映射联接的数据
请告知……为什么您认为它应该给您一些连接的对象?查询的候选对象是RequestDetail,因此它给出了它。如果您执行了
JOIN-FETCH
,那么您可以获取其他字段,但您还没有这样做(因此将那些LEFT-JOIN
更改为LEFT-JOIN-FETCH
)-连接(没有获取)只是形成查询的一种方便方式。。或者,您可以将实体图设置为fetch,或者如果您想要这些fetch,可以在字段本身上设置fetch,没错,Neil,但是如果我使用fetch更改查询,那么我将如何在where子句中为address check创建条件,你能帮我写一篇queryWell吗?一些JPA实现允许在左连接获取上指定别名(就像左连接一样),但JPA规范不包括这种可能性。这也是EntityGraph允许更多控制的地方。。。当使用JPA2.1时。“触摸”仍在事务中的返回对象的字段是使其返回的唯一其他方法。JPA规范是这里的弱点