Я решил создать следующий объект:
public class ScoreMap<T> extends HashMap<T, Double>
И я хотел бы сохранить их в БД:
@ElementCollection(fetch = FetchType.EAGER)
private Map<String, Double> keywords = new ScoreMap<>();
, который прекрасно работает.Все сохранено, как и ожидалось.
Теперь при извлечении кажется, что я не могу вернуть ScoreMap без TypeCasting:
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 и легко воссоздать объект, но я бы хотел, чтобы я мог этого избежать.
Так, как лучше всего подойти к этой ситуации?Я просто проектирую это явно неправильно или я что-то упускаю?