hibernate ORM中的粒度
我在谷歌上搜索了hibernate中的粒度问题。但是我没有找到任何好的答案。我在一次采访中被问到这个问题。有人能用适当的例子解释一下吗?你可以看看这个链接 上面说 RDBMS以表格格式表示数据(对于那些不熟悉RDBMS的人来说,电子表格是一种很好的可视化方式),而面向对象的语言(如Java)将其表示为对象的互连图 这意味着对象关系映射不能正常工作 总的来说,我认为我们需要更细粒度的对象,这意味着我们需要更多不同类型的对象,但当我们设计数据库时,表的数量减少了 其他方面:没有类>没有表hibernate ORM中的粒度,hibernate,Hibernate,我在谷歌上搜索了hibernate中的粒度问题。但是我没有找到任何好的答案。我在一次采访中被问到这个问题。有人能用适当的例子解释一下吗?你可以看看这个链接 上面说 RDBMS以表格格式表示数据(对于那些不熟悉RDBMS的人来说,电子表格是一种很好的可视化方式),而面向对象的语言(如Java)将其表示为对象的互连图 这意味着对象关系映射不能正常工作 总的来说,我认为我们需要更细粒度的对象,这意味着我们需要更多不同类型的对象,但当我们设计数据库时,表的数量减少了 其他方面:没有类>没有表ORM(对
ORM(对象关系映射)
例如hibernate试图将面向对象Java应用程序中的对象模型(对象的互连图)映射到数据库的关系模型(带行和列的表),以便两个模型可以轻松地相互通信<代码>粒度问题是ORM必须处理的几个问题之一,以弥合两个模型之间的差距
粒度是系统由较小组件组成的程度。对象模型中的类具有一系列不同的粒度级别,而SQL数据库中只有两个粒度级别(由于缺乏或不支持用户定义的数据类型):内置数据类型(如VARCHAR、TIMESTAMP、INT)的表和列
考虑一个User
类,它包含一个Address
类的对象
public class User{
private String Name;
private Address address;
}
public class Address{
private String street;
private String city;
private String country;
private String zipCode;
}
在数据库方面,同样的粒度级别,即向用户
表添加新的地址
SQL数据类型是不可能的。此外,与将地址信息保存在单独的表中不同,更好的设计是将地址信息保存在USERS
表中的各个列中,如下所示:
create table USERS (
USERNAME varchar(15) not null primary key,
ADDRESS_STREET varchar(255) not null,
ADDRESS_CITY varchar(255) not null,
ADDRESS_COUNTRY varchar(5) not null,
ADDRESS_ZIPCODE varchar(5) not null
);
这里,与相应的USERS
表相比,Java类User
具有更高的粒度级别。这种不匹配的结果是,对象模型中的类数量多于关系模型中的表数量
Hibernate和其他基于Java持久性API(JPA)的ORM允许User
等实体将Address
等其他实体(使用@embeddeble)嵌入其中,以便它可以映射到USERS
等单个数据库表