JPA使用分组名和值

时间:2017-08-30 17:44:15

标签: java mysql hibernate jpa named-query

我是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;
}

EnumType类别有各种类型,如食物,住宿,旅游等(10种类型)

这是我的类别枚举:

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

}

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

一种方法是在我的Transaction实体上面有一个命名查询,如下所示:

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

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

然后我需要为10个类别提供10个这样的命名查询。

有没有办法可以编写一个命名查询,允许我通过这样的方式将param名称和值发送给一个组:

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

然后通过我想要获得总和的类别? 请帮帮我。

1 个答案:

答案 0 :(得分:0)

搞定了。首先,我们必须提到我们需要将输出按特定列分组,然后我们需要在having子句中对该列赋予约束。这是我写的命名查询:

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

P.S:我在后端使用PostgreSQL,这就是为什么我必须以不同的方式编写它。

相关问题