【发布时间】:2015-08-04 09:26:37
【问题描述】:
我无法从列表中获取单个位置对象。 在 primefaces dataTable 中调用 getLocations() 有效。我可以显示所有位置。 但是当我想从位置列表中获取单个位置时,我总是会得到一个 ClassCastException。 我使用 JPA(休眠)。
实体 Bean:
@Entity
@Table(name = "location")
@NamedQueries({
@NamedQuery(name = "Location.findAll", query = "SELECT l FROM Location l")})
public class Location implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "name")
private String name;
...
CDI 豆:
private List<Location> locations = null;
@PostConstruct
public void init() {
locations = getService().findAll();
Iterator iter = getLocations().iterator();
Location first = (Location)iter.next(); //ClassCastException
同样的问题:
for (Location location : getLocations()) //Classcastexception
{...}
错误信息:
java.lang.ClassCastException: package.ejb.entity.Location cannot be cast to package.ejb.entity.Location
更新: 整个应用程序是一个 EAR 项目。 位置实体 Bean 包含在 EJB-Jar 中。 还有LocationService Session Bean,它被注入到CDI Bean中。 (对于 findAll() 调用)
CDI Bean 包含在 WAR 中。
@shruti1810 提到,可能存在类加载问题。 我从 Oracle 阅读了文档 The Class Loader Hierarchy 我所理解的是,EJB 类加载器是 WAR 类加载器的父级。因此,我不明白为什么会有 ClassCastException。 CDI Bean 中的位置是否从另一个类加载器加载,而不是 findAll() 方法给出的位置?
【问题讨论】:
标签: hibernate jakarta-ee ejb