0

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

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 映射吗?

4

1 回答 1

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 表,如果您只是将此模型用于读取,则可能不需要创建新表。从您的原始关键字表创建一个视图应该足够好。

于 2012-09-13T02:21:20.303 回答