给定:
enum Language
{
EN
DE
IT
FR
}
@Entity
@Table(name = "translation")
class Translation
{
Long entry_id; // mapped to Entry
Language language; // creates primary key with entry_id
String content;
// more fields ...
}
@Entity
@Table(name = "entry")
class Entry
{
Long id;
Map<Language, Translation> translations;
// more fields ...
}
- JPA 3.1和Hibernate 6.1.5+是否允许仅使用2个表在关系数据库(MySQL)中表示上述内容,例如:
table entry (id, stuff)
table translation (entry_id, language, content) primary key [entry_id, language]
1.还考虑对上述问题的扩展,其中内容是另一个@ManyToOne关系:
@Entity
@Table(name = "translation")
class Translation
{
Long entry_id; // mapped to Entry
Language language; // creates primary key with entry_id
List<Post> posts;
}
@Entity
@Table(name = "post")
class Post
{
Long id;
String content;
}
为了拥有所有世界中的大多数世界,人们将如何实现这一点:
- 在Java端Map〈语言,翻译〉
- 数据库端的表数量最少,以避免执行无意义的连接
- 最佳读/写(理想情况下是懒惰的),这样Map〈Language,Translation〉的值不会从DB中读取,除非必要(只有Key是已知的),尤其是不会在每次只有一个条目改变时写入(这就是为什么我们有键,不是吗?)
1条答案
按热度按时间k2fxgqgv1#
很简单: