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
Java JPA NamedQuery与聚合函数和分组依据一起使用_Java_Jpa_Named Query - Fatal编程技术网

Java JPA NamedQuery与聚合函数和分组依据一起使用

Java JPA NamedQuery与聚合函数和分组依据一起使用,java,jpa,named-query,Java,Jpa,Named Query,我的数据库表Foo上有几条记录,我需要聚合一列来求和它的值 表示该表的实体如下所示: @Entity @Table(name = "FOO") @NamedQueries({ @NamedQuery(name = "Foo.total", query = "SELECT f.id, sum(f.someInt) AS SOME_INT, f.parentId FROM Foo f where f.parentId = 'root' group by p.parentId"), @NamedQ

我的数据库表Foo上有几条记录,我需要聚合一列来求和它的值

表示该表的实体如下所示:

@Entity
@Table(name = "FOO")
@NamedQueries({
@NamedQuery(name = "Foo.total", query = "SELECT f.id, sum(f.someInt) AS 
SOME_INT, f.parentId FROM Foo f where f.parentId = 'root' group by 
p.parentId"),
@NamedQuery(name = "Foo.findAll", query = "SELECT f from Foo f") })
public class Foo {

@Id
@Column(name = "ID", insertable = false, updatable = false)
private String id;

@Column(name = "PARENT_ID", insertable = false, updatable = false)
private String parentId;

@Column(name = "SOME_INT", insertable = false, updatable = false)
private Integer someInt;

public Foo() {
}
}

如果我在我的dao服务bean上调用这个:

entityManager.createNamedQuery("Foo.total", Foo.class).getResultList();
我得到这个错误:

Caused by: java.lang.IllegalArgumentException: Cannot create TypedQuery for query with more than one return using requested result type [Foo]
JPA似乎无法匹配对象Foo的返回值。如果是这样的话,我怎样才能让它工作呢

如果我将另一个@NamedQuery称为“Foo.findAll”,它可以正常工作

SELECT f.id, sum(f.someInt) AS SOME_INT, f.parentId FROM Foo f 
where f.parentId = 'root' group by p.parentId"
此查询不返回Foo实体,而是返回投影

您可能希望创建一个具有所选属性的自定义POJO,并在创建查询时将其用作返回类型

见和