Java 在Hibernate中映射映射

Java 在Hibernate中映射映射,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,考虑到以下目标: Keyword{ int id; String area; String keyword; Article article; } 在Hibernate中映射以下关联的最佳方法是什么,其中映射的键应为Keyword.area: Article{ private Map<String,List<Keyword>> keywords = new HashMap<String, List<Keyword>>(); }

考虑到以下目标:

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.findAllscience,以返回所有科学关键字

到目前为止,我最好的想法是将前者转化为

private Map<String,KeywordGroup> keywords = new HashMap<String, KeywordGroup>();
但这给我留下了一些问题,比如:

关键字组中的属性?从逻辑上讲,它将由区域和列表组成,但如何映射? 最简单的数据库设计是在article_id的关键字中有一个FK列,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;
    }
}

非常感谢你的建议,这也是我考虑过的。然而,这不会带来性能问题吗?也就是说,每次我想查找KeyWordsByArea时都必须查询整组文章的关键字?也许我会遇到与其他方法相同的性能问题,我只是不想遇到任何N+1 select或类似的问题。在担心性能之前,我会先做一些工作。您可以编写一个自定义HQL查询,而不是遍历整个关键字集。我接受这个答案。尽管我将来可能需要重新考虑这个问题,但我正在采用接吻策略,到时候我会担心性能。