无法转换为java.io.Serializable类型

45

我目前正在使用Criteria检索用户的详细信息,但是当尝试使用正确的用户查询详细对象时,我遇到了ClassCastException异常。

我的Criteria代码如下:

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异常。我知道我可以通过让用户实现Serializable轻松解决它,但还有其他解决方案吗?


为什么你不想实现Serializable接口? - Juha Syrjälä
3
我有一种感觉,认为有更好的解决方法。 - Thizzer
你有检查过这个链接吗:https://dev59.com/wHI-5IYBdhLWcg3wFkOO - craftsman
4个回答

48

这节省了我的时间,我现在不需要再寻找其他方法了 :) - Al-Mothafar
2
这是解决问题的方法还是只是抑制错误?抱歉,我对Spring Jpa很陌生,正在尝试使用非主键连接表。 - elembivos

35

你应该实现 Serializable 接口。


3
OP正在寻求另一种解决方案。 - user207421
实现需要遵循哪些指示? - Tal Barda

16

我的经验是这样的。我已经建立了一连串父/子关系。但后来,我被迫重构代码。在此过程中,我没有正确更新所有的注释信息。这就是当我开始收到“转换为Serializable”的错误信息时的情况。我实现了Serializable接口,这暴露了真正的问题。一旦一切都正常工作,我就能够移除Serializable接口。

所以,回答你的问题,真正的问题可能在你的设置方面,而Hibernate正在尝试通过对某些实体进行序列化来解决这些问题。尝试临时实现Serializable接口以暴露这些问题,然后再将其删除。


4
在我的情况下,一个ManyToOne映射在查询中产生了多个结果,导致了ClassCastException异常。在实现Serializable之后,Hibernate创建了一个适当的异常。 - adrobisch
在我的情况下,接口使其工作,但是当我使用Hibernate进行编组/解组时,我不想必须将其添加进去。 - Robin
1
我尝试了实现,一切都正常工作。虽然我不明白为什么需要实现“Serializable”,因为其他实体在没有实现它的情况下也能正常工作。 - Nikhil Sahu

7
唯一的另一个解决方案是实现Externalizable。

1
Externalizable 扩展了 Serializable,所以你最终仍然得到了 Serializable。 - Juha Syrjälä
2
@Juha Syrjälä:显然,但这并不意味着它是同样的解决方案。你需要做更多的工作。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接