簡體   English   中英

休眠映射到一個表中的一對多

[英]Hibernate Mapping One-to-many in one table

我們有以下(設計不佳?)表:

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進行映射嗎?

如我先前的評論中所引用,您可以從任何地方獲取該組的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表,如果您僅使用此模型進行讀取,則可能不需要創建新表。 從原始關鍵字表創建視圖應該足夠好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM