1. 简介

在本篇简短教程中,我们将学习如何使用 JPA 设置 SQL 表名。

我们会介绍 JPA 是如何生成默认表名的,以及如何自定义表名。

2. 默认表名生成规则

JPA 的默认表名生成机制与其具体实现相关。

以 Hibernate 为例,默认表名是实体类名,且首字母大写。这个名称是通过 ImplicitNamingStrategy 接口定义的。

我们也可以通过实现 PhysicalNamingStrategy 接口来改变这种默认行为(例如统一加前缀、转为小写等)。✅

3. 使用 @Table 注解设置自定义表名

最简单直接的方式,是使用 @jakarta.persistence.Table 注解来指定表名:

@Entity
@Table(name = "ARTICLES")
public class Article {
    // ...
}

我们也可以将表名定义为静态常量,提高可维护性:

@Entity
@Table(name = Article.TABLE_NAME)
public class Article {
    public static final String TABLE_NAME = "ARTICLES";
    // ...
}

这种方式在需要统一管理多个实体表名时非常实用。✅

4. 在 JPQL 查询中覆盖默认类名

默认情况下,JPQL 查询语句中使用的实体名称是类名:

select * from Article

我们可以通过 @Entity 注解的 name 属性来修改这个名称:

@Entity(name = "MyArticle")
public class Article {
    // ...
}

此时 JPQL 查询语句应改为:

select * from MyArticle

⚠️注意:这种方式不会影响数据库中实际表名,仅用于 JPQL 查询中。❌

5. 总结

在本文中,我们了解了 JPA 如何生成默认表名,以及如何通过 @Table 注解和 @Entity(name = "...") 来自定义表名和 JPQL 别名。

所有示例代码都可以在 GitHub 仓库 中找到。✅


原始标题:Mapping Entitiy Class Names to SQL Table Names with JPA