hibernate ORM中的粒度

hibernate ORM中的粒度,hibernate,Hibernate,我在谷歌上搜索了hibernate中的粒度问题。但是我没有找到任何好的答案。我在一次采访中被问到这个问题。有人能用适当的例子解释一下吗?你可以看看这个链接 上面说 RDBMS以表格格式表示数据(对于那些不熟悉RDBMS的人来说,电子表格是一种很好的可视化方式),而面向对象的语言(如Java)将其表示为对象的互连图 这意味着对象关系映射不能正常工作 总的来说,我认为我们需要更细粒度的对象,这意味着我们需要更多不同类型的对象,但当我们设计数据库时,表的数量减少了 其他方面:没有类>没有表ORM(对

我在谷歌上搜索了hibernate中的粒度问题。但是我没有找到任何好的答案。我在一次采访中被问到这个问题。有人能用适当的例子解释一下吗?

你可以看看这个链接

上面说 RDBMS以表格格式表示数据(对于那些不熟悉RDBMS的人来说,电子表格是一种很好的可视化方式),而面向对象的语言(如Java)将其表示为对象的互连图

这意味着对象关系映射不能正常工作

总的来说,我认为我们需要更细粒度的对象,这意味着我们需要更多不同类型的对象,但当我们设计数据库时,表的数量减少了

其他方面:没有类>没有表

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
等单个数据库表