gpt4 book ai didi

java - 选择具有特定属性的实体时出现 ClassCastException

转载 作者:行者123 更新时间:2023-12-01 16:39:22 24 4
gpt4 key购买 nike

我想选择一个具有特定属性的实体。检索整个实体不是一个选项,因为 file 属性会返回 byte[] ,这会减慢应用程序的速度。但是它会抛出ClassCastException

这是实体:

@NamedQuery(name = "findAllGarbage", query = "SELECT g.filename, g.description,  g.uploadDate FROM Garbage g;")
@Entity
public class Garbage {

@Id
@GeneratedValue
@Column(nullable = false)
private Long id;
@Column(nullable = false)
private String filename;
@Column(nullable = false)
private String fileType;
@Column(nullable = false)
private String uploadDate;
@Column(nullable = false)
private String destroyDate;
@Lob
@Column(nullable = false)
private byte[] file;
@Column(nullable = false)
private String description;
//Getters and Setters...

这是用于数据访问的EJB。 findAllGarbage() 方法是触发 ClassCastException 的方法。

@Stateless(name = "ejbs/SearchEJB")
public class SearchEJB implements ISearchEJB {


@PersistenceContext
private EntityManager em;

public List<Garbage> findAllGarbage() {
Query query = em.createNamedQuery("findAllGarbage");

List<Garbage> gList = new ArrayList();

for (Object o : query.getResultList()) {

Garbage tmpG = new Garbage();
tmpG.setFilename(((Garbage) o).getFilename());
tmpG.setUploadDate(((Garbage) o).getUploadDate());
tmpG.setDescription(((Garbage) o).getDescription());

gList.add(tmpG);
}
return gList;
}
}

最佳答案

您收到 ClassCastException 的原因是您的 getAllGarbage 查询不返回垃圾实例的集合。该查询专门返回与垃圾实例关联的值的子集,而不是完整的垃圾对象。如果您调试该方法,您可能会注意到 query.getResultsList() 返回 Object[] 的集合。 Object[] 应对应于命名查询中指定的值:文件名、描述和上传日期。

这是一个应该有效的结果使用示例。

for (Object o : query.getResultList()) {
Object[] cols = (Object[]) o;
Garbage tmpG = new Garbage();
tmpG.setFilename(cols[0]);
tmpG.setDescription(cols[1]);
tmpG.setUploadDate(cols[2]);

gList.add(tmpG);
}

另一种方法是将 native 查询更改为

select g from Garbage g

这将导致返回完整的垃圾实例,从而允许您的原始代码按预期执行。

顺便说一句,我建议不要像在示例代码中那样为每次访问垃圾实例执行类转换。这种技术给应用程序增加了不必要的开销,并且从长远来看使代码更难以维护。如果您要多次使用强制转换的对象,请创建一个变量来存储强制转换的实例并重用它。

关于java - 选择具有特定属性的实体时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5480312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com