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查询,而不是遍历整个关键字集。我接受这个答案。尽管我将来可能需要重新考虑这个问题,但我正在采用接吻策略,到时候我会担心性能。