当前位置: 首页 > 知识库问答 >
问题:

无法使用请求的结果类型为具有多个返回的查询创建TypeQuery

程振濂
2023-03-14

我收到错误“无法使用请求的结果类型为具有多个返回的查询创建TypeQuery”我尝试了所有列值返回。那次应用程序挂起。我需要在arraylist中获取客户端列表。请帮助,我是JPA新手。

@Override
    public ArrayList<Client> findAllClients() {
        EntityManager entity = this.emf.createEntityManager();
        List<Client> clients = entity.createQuery("select clientID,clientName from Client", Client.class).getResultList();
        return (ArrayList<Client>) clients;
    }

客户端类是

package com.springmaven.models;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;


import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="tblclient")
public class Client {
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="ntClientID")
    private Long clientId;

    @Column(name="vcClientName")
    private String clientName;

    @Column(name="vcLocation")
    private String location;

    @Column(name="ofstTimeZone")
    private Date timeZone;

    @Column(name="vcCommunicationMode")
    private String communicationMode;

    @Column(name="vcContact")
    private String contact;

    @OneToMany(targetEntity=Project.class,mappedBy="client",
            cascade=CascadeType.ALL,fetch=FetchType.EAGER)
    private Set<Project> projects = new HashSet<Project>();

    public Set<Project> getProjects() {
        return projects;
    }

    public void setProjects(Set<Project> projects) {
        this.projects = projects;
    }

    public Long getClientId() {
        return clientId;
    }

    public void setClientId(Long clientId) {
        this.clientId = clientId;
    }

    public String getClientName() {
        return clientName;
    }

    public void setClientName(String clientName) {
        this.clientName = clientName;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public Date getTimeZone() {
        return timeZone;
    }

    public void setTimeZone(Date timeZone) {
        this.timeZone = timeZone;
    }

    public String getCommunicationMode() {
        return communicationMode;
    }

    public void setCommunicationMode(String communicationMode) {
        this.communicationMode = communicationMode;
    }

    public String getContact() {
        return contact;
    }

    public void setContact(String contact) {
        this.contact = contact;
    }

    public Client(){

    }
}

共有3个答案

芮明知
2023-03-14

也就是说,在“客户端”上的投影查询只能返回clientID和clientName,而不是将整个对象加载到内存中。这种方法可以减少数据库服务器的网络流量并节省内存。因此,您可以使用下一个:

List<Object[]> results = 
entity.createQuery("select clientID, clientName from Client").getResultList();

此结果集包含一个对象数组列表,每个数组代表一组属性,在本例中为clientID和clientName。现在您可以检索到这个:

Object[] o = results.get(0); // for first element!
Long id = (Long) o[0]; // choose the correct type!
String name = (String) o[1];
蔚和安
2023-03-14

您可以在(列表)中对结果进行强制转换

<代码>列表

宋智明
2023-03-14

通常在Hibernate中,您只需选择特定的实体,而不必定义所需的列。像这样的:

List<Client> clients = entity.createQuery("select c from Client c", Client.class).getResultList();

您收到 TypedQuery 错误,因为 EntityManager 正在等待客户端集合,但您选择了它的两个特定列,这将使 Hibernate 无法将结果转换为客户端实体。

因此,在您的情况下,使用上面给出的查询,一切都应该正常工作。

 类似资料:
  • 我正在尝试将预言机结果列表绑定到摘要列表。但是我的摘要列表有3个类被定义为DB的实体 我有三个实体类A,B,C 我使用以下查询获得结果,但结果无法转换为摘要对象 调试:我确保结果列表不为空,如果我不将其转换为对象,下面的查询可以正常工作 我看到的第一种方法是遍历summaryList,并像这样将它们分配给单个列表,我还没有测试过这种方法,但我认为它可能会给出一个类强制转换异常,因为强制转换以前也有

  • 我正在使用以下JPA查询,我得到了java.lang.IllegalArgumentException:无法为具有多个返回异常的查询创建TypeQuery。 谁能告诉我我的问题有什么错吗.....我是JPA的新成员,我不知道这里有什么问题。如果有人有想法,请告诉我。

  • 问题内容: 我有一个数据库,正在运行以下查询: 上面的查询一次返回两个结果集,我不能分别触发两个查询。如何在Java类中一次处理两个结果集? 问题答案: 正确的代码来处理JDBC语句返回的多个: 重要位: 并返回以表明语句的结果只是一个数字,而不是一个。 您需要检查以了解是否还有更多结果。 确保关闭结果集或使用

  • 这是我第一次使用JPA。我找不到错误。

  • Firebase查询返回此查询的值 该项由model类捕获 但是,返回null

  • 问题内容: 我有一堆应聘者,他们有一些或多个工作,每个人都在公司工作,并且使用了一些技能。 坏的ascii艺术如下: 这是我的数据库: 。 。 。 。 这是我对查询的尝试(请注意,我打算将通配符更改为字段名称;我只是想使某些功能生效): HediSql说 查询出了什么问题?我希望从不良的ascii艺术中可以清楚地知道我要达到的目标。 (此外,它对我连接表的顺序是否有任何速度差异?我将担心新的MyS