带有参数名和值的分组依据的 JPA 命名查询
JPA named query with group by with paramnames and values
我是 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 Categories有吃、住、行等多种类型(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;
}
}
我需要一个查询来计算每个类别的花费总和。
一种方法是在我的交易实体上方有一个命名查询,如下所示:
@NamedQuery(name="Transaction.sumByFood", query="SELECT SUM(amount) from Transaction group by Category.FOOD")
(我想这就是我们直接在命名查询中给出枚举的方式。如果我错了请纠正我)
然后我需要针对 10 个类别进行 10 个这样的命名查询。
有什么方法可以编写命名查询,让我可以通过类似这样的方式将参数名称和值发送到组:
@NamedQuery(name="Transaction.sumByFood", query="SELECT SUM(amount) from Transaction group by itemCategory=:itemCategory")
然后传类别我要求和?
请帮我解决这个问题。
成功了。首先我们必须提到我们需要按特定列对输出进行分组,然后我们需要在 having 子句中对该列进行约束。这是我写的命名查询:
@NamedQuery(name="Transaction.sumByCategory",
query="SELECT SUM(amount) from Transaction group by itemCategory having itemCategory=:itemCategory")
P.S:我在后端使用 PostgreSQL,这就是为什么我必须以不同的方式编写它。
我是 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 Categories有吃、住、行等多种类型(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;
}
}
我需要一个查询来计算每个类别的花费总和。
一种方法是在我的交易实体上方有一个命名查询,如下所示:
@NamedQuery(name="Transaction.sumByFood", query="SELECT SUM(amount) from Transaction group by Category.FOOD")
(我想这就是我们直接在命名查询中给出枚举的方式。如果我错了请纠正我)
然后我需要针对 10 个类别进行 10 个这样的命名查询。
有什么方法可以编写命名查询,让我可以通过类似这样的方式将参数名称和值发送到组:
@NamedQuery(name="Transaction.sumByFood", query="SELECT SUM(amount) from Transaction group by itemCategory=:itemCategory")
然后传类别我要求和? 请帮我解决这个问题。
成功了。首先我们必须提到我们需要按特定列对输出进行分组,然后我们需要在 having 子句中对该列进行约束。这是我写的命名查询:
@NamedQuery(name="Transaction.sumByCategory",
query="SELECT SUM(amount) from Transaction group by itemCategory having itemCategory=:itemCategory")
P.S:我在后端使用 PostgreSQL,这就是为什么我必须以不同的方式编写它。