映射地图<string,list <foo>&gt;在Hibernate中</string,列出<foo>

时间:2014-07-04 10:57:53

标签: 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>>();
}

如果它是Map,这很简单,但在这种情况下,我主要需要按区域访问关键字(例如article.findAll(&#34; science&#34;)以返回所有科学关键词)。

我迄今为止最好的想法是将前者转变为

private Map<String,KeywordGroup> keywords = new HashMap<String, KeywordGroup>();

但是这给我留下了一些问题,比如:

  • KeywordGroup中的属性?从逻辑上讲,它将由&#34; area&#34;和列表,但如何映射?
  • 最简单的数据库设计是在关键字中为article_id设置一个FK列,赢得关键字组会使这个问题复杂化吗?

您会建议采用什么方法?

1 个答案:

答案 0 :(得分:0)

我认为以下条款的实施对你有用,而不需要Map。

@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;
    }
}