代码之家  ›  专栏  ›  技术社区  ›  Shravan DG

带有参数名和值的group by的JPA命名查询

  •  2
  • Shravan DG  · 技术社区  · 7 年前

    我不熟悉Hibernate,需要使用Group by在我的实体上编写一个JPA命名查询。

    这就是我的实体看起来的样子:

    @Entity
    @NamedQueries({
    @NamedQuery(name="Transaction.getByYear",
            query="from Transaction where year=:year"),
    @NamedQuery(name="Transaction.ByTimestamp",
            query="from Transaction where year=:year order by Timestamp desc"),
    @NamedQuery(name="Transaction.ByActiveStatusAndTimestamp",
    query="from Transaction where year=:year and itemStatus=:itemStatus order by Timestamp desc"),
    @NamedQuery(name="Transaction.sumByYear",
            query="SELECT SUM(amount) from Transaction where year=:year")
    })
    public class Transaction {
    @Id
    @GeneratedValue
    @Column(unique = true)
    private int itemId;
    
    @Column
    private String itemName;
    
    @Column
    private int amount;
    
    @Column
    @Enumerated(EnumType.STRING)
    private Category itemCategory;
    }
    

    这是我的类别枚举:

    public enum Category {
    
    
    ONBOARDING("Onboarding"),
    
    
    EDUCATION("Education"),
    
    
    EQUIPMENT("Equipment"),
    
    
    SOFTWARE("Software");
    
    private final String category;
    
        Category(final String category){
        this.category = category;
    }
    
    @Override
    public String toString() {
        return category;
    }
    
    }
    

    我需要一个查询来计算这些类别中每一个花费的金额之和。

    @NamedQuery(name="Transaction.sumByFood", query="SELECT SUM(amount) from Transaction group by Category.FOOD") 
    

    (我想这就是我们直接在命名查询中给出枚举的方式。如果我错了,请纠正我)

    有什么方法可以编写一个命名查询,允许我通过以下方式将参数名称和值发送到组:

    @NamedQuery(name="Transaction.sumByFood", query="SELECT SUM(amount) from Transaction group by itemCategory=:itemCategory")
    

    然后通过类别,我想得到总和? 请帮我做这个。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Shravan DG    7 年前

    @NamedQuery(name="Transaction.sumByCategory",
            query="SELECT SUM(amount) from Transaction group by itemCategory having itemCategory=:itemCategory")