Hibernate文档声明如下:
5.1.6.5.将一个实体映射到多个表 虽然不建议使用新的模式,但一些遗留数据库强迫您在多个表上映射单个实体。
我已经阅读了很多关于数据库规范化的内容,而且我也不太明白如何既可以规范数据库,又不能映射多个数据库表上的实体,除非您映射了几个不同的实体,并手动执行了一个奇怪的联接语句。或者,映射7个不同的实体,并将它们转移到一个POJO中。有什么地方展示了如何开发一个“新模式”,该模式既标准化又需要一个实体从数据库数据转换为java对象?
而且,我知道在今天这个廉价存储的世界里,完全规范化并不是必要的,但我只是发现这个声明与我所读过的所有东西都不一致。我正在寻找归一化到非规范化的平衡,但在Java持久性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对象?
发布于 2012-08-10 06:07:55
给出你的例子
@Entity
public class User {
long id;
String name;
String email;
int countryCode;
List<Images> uploadedImages;
}
这里有3个实体--用户、国家和图像实体,每个实体可能映射到3个表--每个表有一个实体,图像列表有一个联接表。
这样,您的用户类就变成了
@Entity
public class User {
long id;
String name;
String email;
Country country
List<Images> uploadedImages;
}
@Entity
public class Country {
long id;
String name;
}
@Entity
public class Image{
long id;
String name;
String url;
}
然后添加注释,将属性映射到正确的表和列。
发布于 2012-08-09 23:50:48
文档所说的与数据规范化无关。这与数据分区/表优化有关。因此,如果您有一个包含一个大二进制的列的表,您可能不希望它与主数据是同一表的一部分。这在过去更为常见,因为当时的数据被认为是“大”的,而今天的数据被认为是小的。
另一方面,规范化在OOP (和Hibernate)中非常受欢迎。这一切都是把事情放在他们的位置上,对最小化冗余和依赖来说
https://stackoverflow.com/questions/11895693
复制相似问题