Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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:ClassCastException,同时使用JPA接收对象列表_Java_List_Jpa - Fatal编程技术网

java:ClassCastException,同时使用JPA接收对象列表

java:ClassCastException,同时使用JPA接收对象列表,java,list,jpa,Java,List,Jpa,我正在尝试接收类型为Tempfiles的对象列表,我不确定在获取它的过程中出现了什么问题。当我收到列表时,列表的大小不是零,但当我尝试使用它时,我得到一个ClassCastException: 下面是类Tempfiles的pojo: @Entity @Table(name="tempfiles") @NamedQuery(name="Tempfile.findAll", query="SELECT t FROM Tempfile t") public class Tempfile impleme

我正在尝试接收类型为
Tempfiles
的对象列表,我不确定在获取它的过程中出现了什么问题。当我收到列表时,列表的大小不是零,但当我尝试使用它时,我得到一个ClassCastException: 下面是类
Tempfiles
的pojo:

@Entity
@Table(name="tempfiles")
@NamedQuery(name="Tempfile.findAll", query="SELECT t FROM Tempfile t")
public class Tempfile implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer tempfilesid;

    private byte[] filestream;

    //bi-directional many-to-one association to Filemetadata
    @ManyToOne
    @JoinColumn(name="documentid")
    private Filemetadata filemetadata;

    public Tempfile() {
    }

    public Integer getTempfilesid() {
        return this.tempfilesid;
    }

    public void setTempfilesid(Integer tempfilesid) {
        this.tempfilesid = tempfilesid;
    }

    public byte[] getFilestream() {
        return this.filestream;
    }

    public void setFilestream(byte[] filestream) {
        this.filestream = filestream;
    }

    public Filemetadata getFilemetadata() {
        return this.filemetadata;
    }

    public void setFilemetadata(Filemetadata filemetadata) {
        this.filemetadata = filemetadata;
    }
}
以下是我用来:

public List getTempFileData()
    {
        String METHOD_NAME = "getTempFileData";
        logger.logEntering(METHOD_NAME);
        String strQueryToGetStream = "select t.tempfilesid, t.filemetadata.documentid, t.filestream from Tempfile t";
        logger.logInfo(strQueryToGetStream);
        Query query = entityManager.createQuery(strQueryToGetStream);
        List <Tempfile>tempFileList = query.getResultList();
        logger.logExiting(METHOD_NAME);
        return tempFileList;
    }
这是我得到的一个例外:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.global.empris.domain.Tempfile

非常感谢您的帮助和提前感谢。

您的查询返回的是
对象[]
的列表,而不是
TempFile
。您只选择特定列,因此它不会映射到完整对象


像处理结果集一样处理每个
对象[]
,或者更改查询以选择完整对象(即
从Tempfile t中选择t
)。

在我看来,您从JPA中获得了一个对象数组,因为您只选择了实体的一部分。如果您想要您的实体,请选择它并像这样获取其子集合

select t from Tempfile t left join fetch t.filestream

语句
List tempFileList=query.getResultList()返回一个
列表
。你应该告诉我们Transformers.aliasToBean(TempFile.class)

谢谢你的回复,最初我铸造了Object[]列表来键入TempFile。那也不行,是吗?当然不行。施法不是魔法转化。查询完整对象并处理该对象,或者查询特定列并处理这些列。根据您的需要。阅读任何JPA文档都会发现,当您指定一个SELECT子句来选择候选人的字段时,您的返回类型是
List
。我记得(可能有点生疏),当只选择了一个完整的实体时,您不需要添加
SELECT t
。。。也许是错误的,我确实更习惯于休眠而不是完整的JPA。。。立即更正JPQL
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.global.empris.domain.Tempfile
select t from Tempfile t left join fetch t.filestream