【问题标题】:How does Hibernate map columns?Hibernate 如何映射列?
【发布时间】:2019-11-22 03:04:27
【问题描述】:

我正在通过 Spring 制作一个 REST api 来从数据库中检索数据。但是我想了解 Hibernate 究竟如何将列映射到 POJO?

数据库中的列名类似于“FIRST_NAME”、“LAST_NAME”。在 POJO 中,我将属性名称设为“firstName”和“lastName”。但是,Hibernate 仍然可以正确映射。这是怎么发生的?

【问题讨论】:

  • 为避免列和属性映射错误的问题,建议您在相关字段上使用注解@Column(name = "XXX")

标签: java hibernate jpa pojo


【解决方案1】:

通常,我们会使用@Column 显式定义映射到 a 属性的列名。如果没有使用@Column,它将使用配置的命名策略来确定属性应该映射到哪一列。

我猜您正在使用自定义的 PhysicalNamingStrategy,它将 lowerCamelCase 属性映射到 HIGHER_UNDERSCORE 列。

您可以参考docs 了解有关命名策略行为的更多信息。


正如你在评论中提到的你正在使用 spring,我相信你也在使用 spring boot,它默认将物理命名策略配置为 SpringPhysicalNamingStrategy (docs):

默认情况下,Spring Boot 配置物理命名策略为 SpringPhysicalNamingStrategy。这个实现提供了相同的 表结构为 Hibernate 4:所有点都替换为下划线 骆驼外壳也被下划线取代。默认情况下,所有 表名以小写形式生成,但可以 如果您的架构需要,请覆盖该标志。

例如,TelephoneNumber 实体映射到 电话号码表。

【讨论】:

  • 感谢您的回复。问题是我也没有使用@Column,它仍然可以正确映射。我只是想知道它基于什么机制。
  • 因为如果没有使用@Column,它将使用您配置的命名策略来确定我已经说过的列名。
  • 由于我是 Spring 新手,我并没有真正配置任何命名策略。我可以知道 PhysicalNamingStrategy 将自动应用并为我处理映射吗?
  • 嗯,这不是 Spring 的东西,它是 Hibernate 的东西。是的,我相信如果您不配置默认PhysicalNamingStrategy 将应用它
  • 查看我的更新。如果您使用的是 spring-boot ,它将为您配置一个 PhysicalNamingStrategy ,将名称从驼峰式大小写更改为下划线
【解决方案2】:

我相信您在某处创建了一个 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

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 2011-01-25
    • 2022-11-14
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2012-11-20
    相关资源
    最近更新 更多