我有这样两个类:
public class Average {
long id;
String name;
double average;
public Average(long id , String name , double payment)
{
this.id = id;
this.name = name;
this.payment = payment;
}
@Override
public String toString()
{
return id + "\t" + name + " " + payment;
}
}
和
@Entity
public class Payment{
@Id
@GeneratedValue
long id;
Student student;
Subject subject;
double payment;
public Payment()
{
}
我想用 java 对这个类执行查询,但它不能正常工作。有什么问题。下面我从另一个我称之为类的类中发布了我的查询:
public List<Object> getPayment()
{
Query q = entityManager.createQuery("Select NEW Average( g.subject.id , g.subject.name , AVG(g.payment) ) from Payment g GROUP BY g.subject.id, gge.subject.name");
return q.getResultList();
}
请耐心等待,这是我的第一篇文章!
最佳答案
Average
不是一个实体(你应该用 @Entity
注释它 - 就像你为 Payment
做的那样)所以你不能执行entityManager.createQuery()
。
您还应该在 @Entity
之后和类名之前指定表 @Table(name = "XXX")
。
查询应该是这样的:
选择 g.subject.id , g.subject.name , AVG(g.payment) from Average a, Payment g GROUP BY g.subject.id, g.subject.name
-- 更新
如果 Average
是用于投影的 Bean 类,则执行以下操作:
Object[] payments = (Object[]) entityManager.createQuery("Select g.subject.id,
g.subject.name, AVG(g.payment) from Payment g
GROUP BY g.subject.id, g.subject.name").getSingleResult();
然后遍历 payments
的对象:
for (Object object : payments) {
System.out.println(object);
}
如果结果只有一行,则放置 getSingleResult
否则您需要对象的 List
并遍历列表:
List<Object[]> payments = (List<Object[]>) entityManager.createQuery("Select g.subject.id,
g.subject.name, AVG(g.payment) from Payment g
GROUP BY g.subject.id, g.subject.name").getResultList();
然后遍历 payments
的对象:
if (payments != null){
for (Object[] object : payments) {
System.out.println(object[0] + " " + object[1] + " " + object[2]);
}
}
关于java - 实体管理器,创建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24894701/