Hibernate映射一个表中的一对多

时间:2012-09-12 21:23:01

标签: java hibernate jpa orm

我们有以下(设计不佳?)表:

inputs:
keyword_id serial not null,
group_name string not null,
banned_term string not null

关键字ID是主键。每个group_name有许多禁止的条款。数据如下所示:

keyword_id | group_name | banned_term
1 | incentivization | free money
2 | inaccuracy | we're number one
3 | incentivization | win a free ipod!

没有连接表,group_name不是它自己的实体。我想要一个像这样的域对象:

class BannedTermGroup {
  Integer id;
  String group_name;
  Set<String> banned_terms;

  // ... various getters and setters
}

组名和禁用术语之间的这种一对多关系的唯一示例都涉及某种连接列或连接表,而group_name将始终是其他实体的一部分。这两种情况都不是。可以使用Hibernate映射吗?

1 个答案:

答案 0 :(得分:0)

正如我在之前的评论中引用的那样,您可以从任何地方获取该组的ID。

只是抛开这个问题,您可以查看Hibernate的参考,搜索基本类型的集合。这就是你需要的。

但是,您仍然需要有一个“组”表。

假设它像一列表一样简单:

KEYWORD_GROUP
--------------------
GROUP_NAME   STRING

您原来的关键字表:

KEYWORD
--------------------
GROUP_NAME   STRING
KEYWORD      STRING

我相信这就是你所需要的:

@Entity
@Table("KEYWORD_GROUP")
public class KeywordGroup {
   [.....]

   @ElementCollection
   @CollectionTable(name="KEYWORD", joinColumns=@JoinColumn(name="GROUP_NAME"))
   @Column(name="KEYWORD")
   private List<String> keywords;
}

对于keyword_group表,如果您只是使用此模型进行读取,则可能不需要创建新表。从原始关键字表创建视图应该足够好。