我当前正在使用条件来检索用户的详细信息,但是当尝试使用正确的用户查询详细信息对象时,我收到 ClassCastException。
我的标准代码;
Criteria criteria = sess.createCriteria(UserDetails.class)
criteria.add(Restrictions.eq("user.id", user.id));
我也尝试过使用;
Criteria criteria = sess.createCriteria(UserDetails.class)
Criteria subCriteria = criteria.createCriteria("user");
subCriteria.add(Restrictions.eq("id", user.id));
两者都给了我 ClassCastException。我知道我可以通过让用户实现可序列化来轻松解决它,但是还有其他解决方案吗?
对我来说,问题是使用非 pk 关系时 Hibernate 中的一个错误:https://hibernate.atlassian.net/browse/HHH-7668
作为解决方法,我实现了可序列化并且异常消失了
您应该实现
Serializable
接口。
我的经历是这样的。我有一系列的父母/孩子关系在发挥作用。然后,我被迫重构。在此过程中,我未能正确更新所有注释。那是我开始收到转换为可序列化错误的时候。我实现了 Serialized,这暴露了真正的问题。一旦一切正常,我就可以删除 Serialized。
因此,在回答您的问题时,真正的问题可能出在您的设置中,Hibernate 正在尝试通过序列化某些实体来解决这些问题。尝试暂时实现 Serialized 以暴露问题,然后将其删除。
唯一的其他解决方案是实现Externalized。
在这种情况下,Hibernate 无法将您的导出转换为可序列化,并且使用下面的代码可以解决您的问题。
public class {class name} implements Serializable