我想使用ORM Hibernate。並面臨着以下問題。 很少有表格在不同的語言上進行翻譯。例如它看起來像這樣: 如何創建正確的實體映射?
在我可以使用加入,並得到數據庫所需的所有數據 如:SELECT * FROM car c JOIN translation t on c.description = t.description WHERE t.type = 'CAR'
正如你可以看到表「翻譯」的列「類型」,通過類型過濾使用。
那麼主要的問題是如何創建正確的實體和映射?
我想使用ORM Hibernate。並面臨着以下問題。 很少有表格在不同的語言上進行翻譯。例如它看起來像這樣: 如何創建正確的實體映射?
在我可以使用加入,並得到數據庫所需的所有數據 如:SELECT * FROM car c JOIN translation t on c.description = t.description WHERE t.type = 'CAR'
正如你可以看到表「翻譯」的列「類型」,通過類型過濾使用。
那麼主要的問題是如何創建正確的實體和映射?
一輛車有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
}
您的示例不是組合的,您應該使用'@JoinTable'註釋來映射關係,'@Table'使用設置的表名稱。也沒有id的簡單映射,所以下面的例子不適合我的任務。在我的情況下,這與hibernate繼承即DiscriminatorColumn和DiscriminatorValue有點相似。但是我不能使用繼承者,因爲不允許使用owerriding ID。從代碼方面來看,這是簡單的關聯,但我不知道如何映射它。 –
我剛剛給了一個簡短的代碼,可以根據你的解釋進一步簡化代碼。 –
添加更多關於你想要什麼,爲什麼這裏需要城市的信息 –
有一系列城市和汽車列表。他們中的每一個在表格翻譯中都有不同語言的描述翻譯。我需要知道hotw來創建正確的POJO對象和實體映射。 –