Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate中属性名、逻辑名和物理名之间的差异_Java_Hibernate - Fatal编程技术网

Java hibernate中属性名、逻辑名和物理名之间的差异

Java hibernate中属性名、逻辑名和物理名之间的差异,java,hibernate,Java,Hibernate,我不熟悉hibernate,很难理解hibernate中逻辑名称的用法?我读过这个 我无法理解类属性名称、逻辑名称和物理名称之间的区别。 我知道物理名称是db中的名称,属性名称当然是java类属性名称。但逻辑名称的作用是什么?为什么现在有两个阶段称为隐式NamingStrategy和物理NamingStrategy?逻辑名称在java/Hibrate配置中定义。 物理名称是数据库中的名称。 根据官方文件中的命名策略部分: 对象模型到关系数据库的映射的一部分是将名称从对象模型映射到相应的数据库名称

我不熟悉hibernate,很难理解hibernate中逻辑名称的用法?我读过这个

我无法理解类属性名称、逻辑名称和物理名称之间的区别。
我知道物理名称是db中的名称,属性名称当然是java类属性名称。但逻辑名称的作用是什么?为什么现在有两个阶段称为隐式NamingStrategy和物理NamingStrategy?

逻辑名称在java/Hibrate配置中定义。 物理名称是数据库中的名称。 根据官方文件中的命名策略部分:

对象模型到关系数据库的映射的一部分是将名称从对象模型映射到相应的数据库名称。Hibernate将此过程视为两个阶段:

第一阶段是从域模型映射中确定适当的逻辑名称。逻辑名称可以由用户显式指定(例如使用@Column或@Table),也可以由Hiernate通过隐式NamingStrategy契约隐式确定

第二个是将此逻辑名称解析为PhysicalNamingStrategy契约定义的物理名称


逻辑名称在java/Hibrate配置中定义。 物理名称是数据库中的名称。 根据官方文件中的命名策略部分:

对象模型到关系数据库的映射的一部分是将名称从对象模型映射到相应的数据库名称。Hibernate将此过程视为两个阶段:

第一阶段是从域模型映射中确定适当的逻辑名称。逻辑名称可以由用户显式指定(例如使用@Column或@Table),也可以由Hiernate通过隐式NamingStrategy契约隐式确定

第二个是将此逻辑名称解析为PhysicalNamingStrategy契约定义的物理名称


分为两个阶段的想法是分离关注点或责任。。。。让你更加灵活。。。示例:假设您在一个大型项目中,有两个团队,一个负责数据库设计(包括命名),另一个负责对象建模。。。数据库团队总是在更改其命名标准(无论出于何种原因),但是,他们负责实施物理名称策略,并约定逻辑名称应为小写(例如:dummy_属性)。。。如果hibernate不允许您定义逻辑NAIMG策略,那么您还必须以小写形式命名类属性。。。这就是分为两个阶段的原因。

分为两个阶段的想法是分离关注点或责任。。。。让你更加灵活。。。示例:假设您在一个大型项目中,有两个团队,一个负责数据库设计(包括命名),另一个负责对象建模。。。数据库团队总是在更改其命名标准(无论出于何种原因),但是,他们负责实施物理名称策略,并约定逻辑名称应为小写(例如:dummy_属性)。。。如果hibernate不允许您定义逻辑NAIMG策略,那么您还必须以小写形式命名类属性。。。这就是两个阶段的原因

如果我提到了文档的链接,那意味着我已经读过了。告诉我你为什么需要逻辑名称?当然。JPA没有定义逻辑名称和物理名称之间的区别。但是,如果希望围绕数据库对象的命名定义规则,则可以覆盖PhysicalNamingStrategyStandardImpl.toPhysicalTableName(标识符名称,JdbcEnvironment上下文)。这允许实现命名规则,而无需硬编码。我希望我是有帮助的。noooological名称就是您的代码/hibernate配置中的名称。您可以选择将其保留为物理名称,或者使用命名策略为物理名称定义规则。请具体说明不清楚的地方。伊门,谢谢你抽出时间。但我想知道为什么我们需要逻辑名称?卡里托斯回答说,如果我提到了文件的链接,那意味着我已经读过了。告诉我你为什么需要逻辑名称?当然。JPA没有定义逻辑名称和物理名称之间的区别。但是,如果希望围绕数据库对象的命名定义规则,则可以覆盖PhysicalNamingStrategyStandardImpl.toPhysicalTableName(标识符名称,JdbcEnvironment上下文)。这允许实现命名规则,而无需硬编码。我希望我是有帮助的。noooological名称就是您的代码/hibernate配置中的名称。您可以选择将其保留为物理名称,或者使用命名策略为物理名称定义规则。请具体说明不清楚的地方。伊门,谢谢你抽出时间。但我想知道为什么我们需要逻辑名称?卡里托斯回答了。谢谢卡里托斯,这是我需要的。另一个问题,我想知道隐式命名策略的默认行为。是否要将camel case属性名称更改为小写?文档说默认的隐式策略是隐式NamingStrategyJPACompliantImpl,但我想知道隐式NamingStrategyJPACompliantImpl的行为。我不太确定这一点,因为我总是显式地命名实体和属性(分别使用
@Table
@Column
)。。。然而,我假设隐式NamingStrategyJPACompliantImpl使用基于此的JAVA类/属性命名约定。。。您必须使用提供的配置才能真正确定……感谢Carlitos,这正是我所需要的。还有一个问题,我想问