java - 实体管理器,创建查询

标签 java hibernate jpa entitymanager

我有这样两个类:

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/

相关文章:

java - Api Jena - 我收到警告 "RDFDefaultErrorHandler"

java - Spring RestTemplate Jackson 反序列化数组数组

java - Hibernate 和 C3p0 池的问题

hibernate - 当实体的主键之间存在关系时,必须在调用save()之前手动分配此类的id

sql - Spring JPA : No converter data from DB in to DTO

mysql - 基于 EclipseLink 2.5、JPA 2.0 中实体值的表名

java - 将数据从 ReadableByteChannel 传输到文件

java - netbeans、cmd 和 .bat 或 .cmd 中的路径差异

java - 如何在 spring 数据 jpa 规范中将枚举作为字符串处理

jpa - 使用命名空间,http ://xmlns. jcp.org/xml/ns/persistence/导致错误