具有hibernate的JPA注释映射,以及最佳关系模型

时间:2013-02-03 14:47:08

标签: java hibernate jpa annotations

我正在试着注释这个:

public class                        Keyword {
    @Id @GeneratedValue
    private Integer                 id;
    //Missing annotation
    private Map<Keyword, Integer>   keywordRelated;
}

我发现了这个example但他们没有提供关系模型,而且它不是完全相同的模型。我无法弄清楚他们的桌子是怎样的。

1 个答案:

答案 0 :(得分:1)

下面仅说明如何映射具有实体作为关键字的Map(取决于具体情况可以是有更好的解决方案,比如具有比率的中间对象)。

@ElementCollection用于映射此类集合。当值不是实体时,不能使用@OneToMany。

默认情况下,映射

@ElementCollection
private Map<Keyword, Integer> keywordRelated;

映射到数据库中的下表(假设关键字实体的表名是关键字,不受@ Table-annotation的影响):

Keyword_KEYWORDRELATED (
  Keyword_ID (PK, FK to Keyword ID), 
  KEYWORDRELATED , 
  keywordRelated_KEY (FK to Keyword ID)
)

如果数据库表和列的默认命名不够,可以按如下方式进行自定义:

@ElementCollection
@CollectionTable(name= "keyword_to_related_keyword")
@Column(name="ratio")
@MapKeyColumn(name="related_keyword_id")
@MapKeyJoinColumn(name="some_other_preferred_name")
public Map<Keyword, Integer> keywordRelated;