我试图接收Tempfiles
类型的对象列表,我不知道在获取它的方式出了什么问题。当我收到列表时,列表的大小不为零,但是当我尝试使用它时,我得到了ClassCastException:
这是班级Tempfiles
的极点:
@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;
}
以下是我收到它的方式:
List <Tempfile>tempFileList = fileDao.getTempFileData();
当我在循环中使用列表时,我得到了异常:
for(Tempfile tempFile : tempFileList)
{
decryptAndEncryptStream(tempFile, job, publicKey);
}
这是我得到的例外:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.global.empris.domain.Tempfile
非常感谢您的帮助和提前感谢。
答案 0 :(得分:1)
您的查询返回的是Object[]
而非TempFile
的列表。您只选择特定列,因此不会映射到完整对象。
像对待结果集一样处理每个Object[]
,或更改查询以选择完整对象(即SELECT t FROM Tempfile t
)。
答案 1 :(得分:0)
IMO,您从JPA获取了一系列对象,因为您只选择了实体的一部分。如果你想要你的实体,选择它并像这样获取它的子集合
select t from Tempfile t left join fetch t.filestream
答案 2 :(得分:0)
语句List <Tempfile>tempFileList = query.getResultList();
返回List<Object>
。你应该Transformers.aliasToBean(TempFile.class)