是否有任何方法使用一个值从检索列表在HQL?



我正在尝试使用HQL将实体映射到各自的DTO列表。是否有办法只选择URL列表的第一个元素和Map中的最新日期元素?

这是我试图建立的查询:

@Query("SELECT NEW ProductShownInListDto(p.name, p.price.getLatest(), p.productImages.get(1)) FROM Product p")
public List<ProductShownInListDto> getProductsToShowInList();

DTO:

public class ProductShownInListDto implements Serializable {
private String name;
private BigDecimal price;
private URL productImage;
}

产品实体:

public class Product implements Serializable {
// [...] Other fields
@NotBlank
@Column(name = "name", nullable = false)
private String name;
@NotNull
@ElementCollection
private Map<LocalDate, BigDecimal> prices;
@NotNull
@ElementCollection
private List<URL> productImages;
}

这不能用投影来完成,因为子查询只允许在where和having子句中,而实体方法根本不允许,因为没有办法将它们转换成本地sql。

你可以通过创建一个拥有你需要的字段的数据库视图,将该视图映射到一个不可变的实体,并编写jpql查询从视图的实体而不是产品实体获取数据来实现这一点。

最新更新