簡體   English   中英

映射地圖 <String,List<Foo> &gt;在休眠

[英]Mapping a Map<String,List<Foo>> in Hibernate

考慮以下對象:

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(“ science”)以返回所有科學關鍵字)。

到目前為止,我最好的想法是將前者轉變為

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

但這給我留下了一些問題,例如:

  • KeywordGroup中的屬性? 從邏輯上講,它將由“區域”和列表組成,但是如何映射呢?
  • 為此,最簡單的數據庫設計是在article_id的關鍵字中包含FK列,KeywordGroup不會使它復雜化嗎?

您會建議哪種方法?

我認為以下Article的實現將為您工作,而無需使用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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM