Bhe*_*ung 1 java entity classcastexception comparator jsf-2
我正在使用a Comparator来对viewcoped托管bean中List<Entity>的它的属性(类型Date)进行排序.
问题是我一直得到ClassCastException如下 -
java.lang.ClassCastException:pkg.db.BaseArStatus无法强制转换为pkg.db.BaseArStatus.
为什么不能投BaseArStatus来BaseArStatus?是因为BaseArStatus是Entity吗?
这个问题对我来说真的很奇怪,因为我每次都没有得到例外.在构建和部署应用程序时,大多数工作正常(运行没有任何问题)但有时(即使我做同样的事情 - 构建和部署)它在运行时失败了ClassCastException.
为什么这种情况有时只发生而不是一直发生?是因为我在托管bean中使用它吗?
这就是托管bean的样子 -
@ManagedBean
@ViewScoped
public class MyBean {
@PersistenceContext(unitName = "myPU")
private EntityManager em;
public void myMethod() {
List<BaseArStatus> basList = this.fetchAllBaseArStatus();
Collections.sort(basList, new Comparator<BaseArStatus>() {
@Override
public int compare(BaseArStatus o1, BaseArStatus o2) {
return o1.getMonthDate().compareTo(o2.getMonthDate());
}
});
//...
Run Code Online (Sandbox Code Playgroud)
而实体BaseArStatus-
@Entity
@Table(name = "base_ar_status")
@NamedQueries({
@NamedQuery(name = "BaseArStatus.findAll", query = "SELECT b FROM BaseArStatus b")})
public class BaseArStatus implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@NotNull
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@NotNull
@Column(name = "month_date")
@Temporal(TemporalType.DATE)
private Date monthDate;
@Basic(optional = false)
@NotNull
@Column(name = "ar_count")
private double arCount;
@Size(max = 50)
@Column(name = "user_id")
private String userId;
@Column(name = "last_update_date")
@Temporal(TemporalType.TIMESTAMP)
private Date lastUpdateDate;
public BaseArStatus() { }
//...
Run Code Online (Sandbox Code Playgroud)
两个不同的类加载器正在加载该类的两个不同副本.当客户端代码"熟悉"该类的一个副本时,会获得一个对象,该对象是该类的另一个副本的实例,这就是您所获得的.
只有在两个类加载器都加载了类时才会出现此问题.这可能会让它看起来断断续续; 根据您通常无法控制的事件,其中一个类加载器可能已加载或未加载该类.根据我的经验,这是Java EE编程中最常见的问题,当然,这正是您正在做的事情.
| 归档时间: |
|
| 查看次数: |
689 次 |
| 最近记录: |