【问题标题】:JPA annotation Map with hibernate, and best relational model具有休眠和最佳关系模型的 JPA 注释映射
【发布时间】:2013-02-03 14:47:07
【问题描述】:

我正在尝试对此进行注释:

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

我找到了这个example,但他们没有提供关系模型,而且它不是完全相同的模型。而且我不知道他们的桌子是怎样的。

【问题讨论】:

  • 为什么相关关键字会出现在地图中而不仅仅是列表中,例如列出 相关?
  • 因为我需要用它存储一个比率,它存储在一个整数中。无论如何,即使它不是最好的设计,我也想知道该怎么做。
  • 看看@mappedBy。如果你需要存储一个比率,你需要一个关联类。
  • 谢谢你,我想知道怎么做。

标签: java hibernate jpa annotations


【解决方案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;

【讨论】:

  • 您能否给我一张这些注释将创建的数据库表的草图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2012-08-05
  • 2012-09-05
相关资源
最近更新 更多