Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 使用GroupBy、OrderBy和Sum函数时,带有外部联接的JPQL查询返回空列表_Jpa_Jpa 2.0_Spring Data_Jpql_Spring Data Jpa - Fatal编程技术网

Jpa 使用GroupBy、OrderBy和Sum函数时,带有外部联接的JPQL查询返回空列表

Jpa 使用GroupBy、OrderBy和Sum函数时,带有外部联接的JPQL查询返回空列表,jpa,jpa-2.0,spring-data,jpql,spring-data-jpa,Jpa,Jpa 2.0,Spring Data,Jpql,Spring Data Jpa,这是我的产品实体: @Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @NotBlank private String name; @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }) private Categ

这是我的产品实体:

@Entity
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotBlank
    private String name;

    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    private Category category;

    ...
}
这是关系产品订单的productOrder连接表:

@Entity
public class ProductOrder {

    @EmbeddedId
    private ProductOrderId pk;

    @Min(value = 1)
    private int quantity; 

    ...
}
这是embeddedId类:

@Embeddable
public class ProductOrderId {

    @ManyToOne
    @JoinColumn(name = "product_id")
    private Product product;

    @ManyToOne
    @JoinColumn(name = "orderr_id")
    private Order order;

    ...
}
我有一个JPQL查询,它可以完美地查找一个类别中的所有产品,并根据它们的总销售量对它们进行排序。由于它是一个外部连接,我还得到了尚未售出的连接:

@Query(value = "select p, sum(po.quantity) as total_quantity " + 
        "from ProductOrder po " +
        "right join po.pk.product p where p.category = (?1) " +
        "group by p.id, p.name " +
        "order by total_quantity desc nulls last")
Page<Object[]> findBestSellerProductsByCategory(Category category, Pageable pageable);
@Query(value=“选择p,总和(采购订单数量)作为总数量”+
“来自ProductOrder po”+
“右键连接po.pk.product p,其中p.category=(?1)”+
按p.id、p.name分组+
“按总数量订购说明上次为空”)
PageFindBestSellerProductsByCategory(类别、可分页、可分页);
问题是,当一个类别中没有任何售出的产品时,我会得到一个空页面。因此,为了使用这个查询,我的类别必须至少有一个已售出的产品,然后我还要得到其他尚未售出的产品。这里有什么问题

因为我做了一个“selectfromjunctiontable(ProductOrder)”,当这个表中的类别中没有任何元素时,我会得到一个空列表。但是我不能用“从产品中选择”的另一种方式,因为产品没有productOrder表的引用,所以在这种情况下我不能建立连接关系

信息:当我删除groupBy时,它会工作。我从一个类别中获得我的产品,即使它们还没有售出

@Query(value = "select p " + 
        "from ProductOrder po " +
        "right join po.pk.product p where p.category = (?1)")
Page<Object[]> findProductsByCategory(Category category, Pageable pageable);
@Query(value=“select p”+
“来自ProductOrder po”+
“右键连接po.pk.product p,其中p.category=(?1)”)
PageFindProductsByCategory(类别、可分页、可分页);

您是否直接针对数据库尝试了Select语句?您确定可以使用GROUP BY子句中的SELECT中不包含的列吗?当我至少有1个已售出产品时,查询会起作用。所以我假设这不是问题所在,因为“select p”选择所有列,包括group by子句(p.name,p.id)中的列。