【发布时间】:2012-08-07 09:40:42
【问题描述】:
Hibernate 文档声明如下:
5.1.6.5。将一个实体映射到多个表
虽然不推荐用于新架构,但一些旧数据库强制 你的[原文如此] 将单个实体映射到多个表上。
我已经阅读了大量有关数据库规范化的内容,但我真的不明白如何既能规范化数据库又不能将实体映射到多个数据库表上,除非您映射多个不同的实体并执行奇怪的连接语句手动。或者,您映射 7 个不同的实体并将它们传输到一个 POJO。有没有什么地方展示了如何开发一个“新模式”,它既是规范化的,又需要一个实体来从数据库数据转换为 java 对象?
另外,我知道在当今廉价存储的世界中,完全规范化并不是必需的,但我发现这个陈述与我读过的所有其他内容不一致。我正在寻找规范化到非规范化的平衡,但没有找到使用 Java Persistence API 的简单方法。
编辑:
例子:
如果我的用户实体具有以下内容:
@Entity
public class User {
long id;
String name;
String email;
int countryCode;
List<Images> uploadedImages;
}
我不会将用户的国家名称和图像集合存储在同一张表上,而是将国家/地区放在一张表上:
Table Countries Country_Code Country_Name
AF Afghanistan etc....
带有国家代码和国家名称,然后打开,并将图像上传到带有用户 ID 的单独表格中,
Table UploadedImages User_Id Image_Name Image_Url
1 Hello.jpg Amazon S3
1 Goodbye.jpg Photobucket
那么我该如何只使用一个实体呢?或者我是否使用来自第一个实体的信息从数据库中获取三个单独的实体?如您所知,我对基本架构有点困惑,如何将上面的数据转换为 java 对象?
【问题讨论】:
-
您能否提供一个您认为应该映射到多个表的实体示例?
-
如果我有一个具有唯一 ID 和电子邮件地址的用户实体,我该如何将其映射到多个表?
-
@BedwyrHumphreys - 我希望这是我需要存储的唯一信息。
标签: java mysql hibernate normalization