2012-09-12 75 views
0

我们有以下的(设计不当?)表:Hibernate映射一个一对多在一个表

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 
} 

唯一的例子组名之间的一个一对多的关系,并禁止条款都涉及某种形式的联接列或连接表,而组名会总是成为其他实体的一部分。这里既不是这样。这可以使用Hibernate映射吗?

+1

这没有意义。对于每个组你有多个条款,因此多个ID,你的“模型”如何只有一个ID? –

+0

你是对的。我想这个模型只需要group_name和banned_terms。 – whiterook6

回答

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", [email protected](name="GROUP_NAME")) 
    @Column(name="KEYWORD") 
    private List<String> keywords; 
} 

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