Учитывая следующий объект:
Keyword{
int id;
String area;
String keyword;
Article article;
}
Каков наилучший способ сопоставить следующую ассоциацию в Hibernate, где ключ карты должен быть Keyword.area:
Article{
private Map<String,List<Keyword>> keywords = new HashMap<String, List<Keyword>>();
}
Это просто, если это была карта, но в этой ситуации мне больше всего нужно будет получить доступ к ключевым словам по областям (например, article.findAll("наука"), чтобы вернуть все ключевые слова в науке).
Лучшей идеей, которую я получил до сих пор, является преобразование первого в
private Map<String,KeywordGroup> keywords = new HashMap<String, KeywordGroup>();
но это оставляет мне некоторые вопросы, например:
Какой подход вы бы предложили?
Я думаю, что следующая реализация статьи будет работать для вас, без необходимости в Карте.
@Entity
public class Article {
@OneToMany(mappedBy="article")
private Set<Keyword> keywords;
//..
public Set<Keyword> findKeywordsByArea(String area) {
Set<Keyword> matchingKeywords = new HashSet<Keyword>();
for(Keyword keyword : this.keywords) {
if(keyword.getArea().equals(area)) {
matchingKeywords.add(keyword);
}
}
return matchingKeywords;
}
}