通过命名查询JPA2.0获取不完整的数据

时间:2015-05-11 06:47:20

标签: jpa

我有一个名为ReqestDetail的实体,并完成了关联和映射,如下面的代码段:

@ManyToOne
@JoinColumn(name="STATUS_C")
private StatusCode statusCode;

//bi-directional many-to-one association to RequestAddressDetail
@OneToMany(mappedBy="requestDetail")
private List<RequestAddressDetail> addressDetails;

我在Named Query下面创建了根据地址获取详细信息。

  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 );

但是,当我调用query.getResultList()时,它只给我RequestDetail实体的数据,但不提供我在该实体中提到的映射连接的数据。

请告知......

1 个答案:

答案 0 :(得分:0)

为什么你认为它应该给你一些联合对象?您的查询候选者是RequestDetail,因此它给出了。如果您执行了JOIN FETCH,那么您可以获取其他字段,但您还没有这样做(因此将LEFT JOIN更改为LEFT JOIN FETCH) - JOIN(没有FETCH)只是方便形成查询的方式..或者,您可以将实体图设置为获取,或者如果您想要那些提取,则在字段本身上设置提取