我正在制作Spring的REST api,以从数据库中检索数据。但是我想了解Hibernate如何精确地将列映射到POJO?
数据库中的列名类似于“ FIRST_NAME”,“ LAST_NAME”。在POJO中,我将属性名称设置为“ firstName”和“ lastName”。但是,Hibernate仍然可以正确映射。怎么发生的?
通常,我们将使用@Column
显式定义映射到a属性的列名称。如果未使用@Column
,它将使用配置的命名策略来确定属性应映射到哪一列。
我猜您正在使用自定义的PhysicalNamingStrategy
,它将{{CamelCase}属性映射到HIGHER_UNDERSCORE列。
有关命名策略行为的更多信息,请参考docs。
正如您在评论中提到的那样,您正在使用spring,我相信您也正在使用spring boot,默认情况下它会将物理命名策略配置为SpringPhysicalNamingStrategy
(docs):
,默认情况下,Spring Boot使用以下命令配置物理命名策略: SpringPhysicalNamingStrategy。该实现提供了相同的 Hibernate 4的表结构:下划线替换所有点 骆驼肠衣也被下划线代替。默认情况下,所有 表名以小写形式生成,但是可以 如果您的模式需要,请覆盖该标志。
例如,一个TelephoneNumber实体被映射到 电话号码表。
我相信您已经在某个地方创建了一个hbm文件(该文件主要用于基于XML的文件,而不是用于基于注释的,因为您没有提供代码),它是用XML编写的文件。该文件允许使用POJO类映射列。 我们可以定义以下映射文件,该文件指示Hibernate如何将已定义的一个或多个类映射到数据库表。 (这通常是为了您的理解)
例如:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nearex.scheduler.dto">
<class name="SchedulerJobMaster" table="scheduler_job_master">
<id name="jmId" type="int">
<column name="id" />
<generator class="native" />
</id>
<property name="firstName" type="string">
<column name="FIRST_NAME"/>
</property>
<property name="lastName" type="string">
<column name="LAST_NAME"/>
</property>
</class>
</hibernate-mapping>
您可以阅读本教程以获得更好的参考:https://www.tutorialspoint.com/hibernate/hibernate_mapping_files.htm