我决定创建以下对象:
public class ScoreMap<T> extends HashMap<T, Double>
我想将它们保存在数据库中:
@ElementCollection(fetch = FetchType.EAGER)
private Map<String, Double> keywords = new ScoreMap<>();
效果很好。一切都按预期保存。
现在,在检索时,我似乎无法在没有 TypeCasting 的情况下返回 ScoreMap:
public ScoreMap<String> getKeywords()
{
return (ScoreMap<String>)keywords;
}
这样做我得到以下错误:
Servlet.service() for servlet [dispatcherServlet] in context with path [/myApp] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: org.hibernate.collection.internal.PersistentMap cannot be cast to entity.ScoreMap (through reference chain: java.util.ArrayList[0]->entity.Document["document_knowledge"]->entity.DocumentKnowledge_$$_jvst505_2["keywords"])] with root cause
java.lang.ClassCastException: org.hibernate.collection.internal.PersistentMap cannot be cast to entity.ScoreMap
我尝试将ScoreMap更改为:
public class ScoreMap<T> extends HashMap<T, Double> implements Map<T, Double>
结果相同。
我需要返回一个ScoreMap以在那里使用其他方法。
我知道我可以轻松地foreach并重新创建对象,但我希望我可以避免这种情况。
那么对于这种情况,哪种方法最好呢?我只是设计了这个明显错误的东西还是我错过了其他东西?
慕容3067478
相关分类