Spring JPA投影可以包含集合吗?

12

我有一个客户实体,我只想选择其中的几个字段和它们关联的客户地址。我定义了一个Spring Data JPA投影接口如下:

public interface CustomerWithAddresses {
    Integer getId();
    String getFirstName();
    String getLastName();
    String getBrandCode();
    String getCustomerNumber();
    Set<CustomerAddress> getCustomerAddresses();
}

但是从我的存储库方法:

CustomerWithAddresses findCustomerWithAddressesById(@Param("id") Integer id);

我不断地遇到针对拥有多个客户地址的客户的NonUniqueResultException。投影是否必须具有平面结构,即它们不像真实实体一样支持集合?

1个回答

1
您有一个Set<CustomerAddress> getCustomerAddresses();,它是一对多关系。当Spring Data为CustomerWithAddresses执行选择时,它会进行连接,在结果集中有N条记录(N是id为id的CustomerWithAddresses的CustomerAddress数量)。您可以将CustomerWithAddresses更改为CustomerWithAddresses列表来检查它。
List<CustomerWithAddresses> findCustomerWithAddressesById(@Param("id") Integer id);

当你使用实体Spring数据组合时,将多个结果合并为一个元素,并按ID分组,因为ID是唯一标识符。
你可以做以下操作:
1)添加到CustomerWithAddresses接口中。
@Value("#{target.id}")
Integer getId();

使用您的查询
2) 使用@Query
@Query("select adr from CustomerWithAddressesEntity adr where adr.id=:id")
CustomerWithAddresses findCustomerWithAddressesById(@Param("id") Integer id);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接