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