2016-08-23 33 views
0

我想使用ORM Hibernate。並面臨着以下問題。 很少有表格在不同的語言上進行翻譯。例如它看起來像這樣: enter image description here如何創建正確的實體映射?

在我可以使用加入,並得到數據庫所需的所有數據 如:SELECT * FROM car c JOIN translation t on c.description = t.description WHERE t.type = 'CAR'

正如你可以看到表「翻譯」的列「類型」,通過類型過濾使用。

那麼主要的問題是如何創建正確的實體和映射?

+0

添加更多關於你想要什麼,爲什麼這裏需要城市的信息 –

+0

有一系列城市和汽車列表。他們中的每一個在表格翻譯中都有不同語言的描述翻譯。我需要知道hotw來創建正確的POJO對象和實體映射。 –

回答

0

一輛車有OneToMany翻譯。 Similary城市有OneToMany翻譯。 但是,每個翻譯都有零到一輛汽車或零到一個城市。

譯文既可以是汽車也可以是城市,因爲它的描述是關於城市還是汽車。這是通過ManyToOne符號實現的。在hibernate中沒有註釋來明確說出從零開始的範圍。以下是獲得映射的公平想法。儘管我可以認爲城市擁有OneToMany汽車,但我並沒有假設城市與汽車之間存在任何關係。

@Entity 
class Car 
{ 
private int Id; 
private String name; 
//.......... declare all variables that you need 
@OneToMany(mappedBy = "car") 
private List<Translation> 
//getters and setters 
} 

@Entity 
class City 
{ 
private int Id; 
private String name; 
//.......... declare all variables that you need 
@OneToMany(mappedBy = "city") 
private List<Translation> 
//getters and setters 
} 

@Entity 
class Translation 
{ 
private int Id; 
private String language; 
//.......... declare all variables that you need 
@ManyToOne 
private Car; 
@ManyToOne 
private City; 
//getters and setters 
} 
+0

您的示例不是組合的,您應該使用'@JoinTable'註釋來映射關係,'@Table'使用設置的表名稱。也沒有id的簡單映射,所以下面的例子不適合我的任務。在我的情況下,這與hibernate繼承即DiscriminatorColumn和DiscriminatorValue有點相似。但是我不能使用繼承者,因爲不允許使用owerriding ID。從代碼方面來看,這是簡單的關聯,但我不知道如何映射它。 –

+0

我剛剛給了一個簡短的代碼,可以根據你的解釋進一步簡化代碼。 –