Spring Boot JPA中使用@Entity和@Table的实现
作者:flydean 发布时间:2023-11-22 11:49:58
标签:Spring,Boot,JPA,@Entity,@Table
本文中我们会讲解如何在Spring Boot JPA中实现class和数据表格的映射。
默认实现
Spring Boot JPA底层是用Hibernate实现的,默认情况下,数据库表格的名字是相应的class名字的首字母大写。命名的定义是通过接口ImplicitNamingStrategy来定义的:
/**
* Determine the implicit name of an entity's primary table.
*
* @param source The source information
*
* @return The implicit table name.
*/
public Identifier determinePrimaryTableName(ImplicitEntityNameSource source);
我们看下它的实现ImplicitNamingStrategyJpaCompliantImpl:
@Override
public Identifier determinePrimaryTableName(ImplicitEntityNameSource source) {
if ( source == null ) {
// should never happen, but to be defensive...
throw new HibernateException( "Entity naming information was not provided." );
}
String tableName = transformEntityName( source.getEntityNaming() );
if ( tableName == null ) {
// todo : add info to error message - but how to know what to write since we failed to interpret the naming source
throw new HibernateException( "Could not determine primary table name for entity" );
}
return toIdentifier( tableName, source.getBuildingContext() );
}
如果我们需要修改系统的默认实现,则可以实现接口PhysicalNamingStrategy:
public interface PhysicalNamingStrategy {
public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment jdbcEnvironment);
public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment jdbcEnvironment);
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment);
public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment jdbcEnvironment);
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment jdbcEnvironment);
}
使用@Table自定义表格名字
我们可以在@Entity中使用@Table来自定义映射的表格名字:
@Entity
@Table(name = "ARTICLES")
public class Article {
// ...
}
当然,我们可以将整个名字写在静态变量中:
@Entity
@Table(name = Article.TABLE_NAME)
public class Article {
public static final String TABLE_NAME= "ARTICLES";
// ...
}
在JPQL Queries中重写表格名字
通常我们在@Query中使用JPQL时可以这样用:
@Query(“select * from Article”)
其中Article默认是Entity类的Class名称,我们也可以这样来修改它:
@Entity(name = "MyArticle")
这时候我们可以这样定义JPQL:
@Query(“select * from MyArticle”)
来源:https://segmentfault.com/a/1190000021886398


猜你喜欢
- 本文实例为大家分享了Android Studio实现简单计算器功能的具体代码,供大家参考,具体内容如下程序步骤:(1)在布局文件定义一些计算
- java数据类型与二进制详细介绍在java中Int 类型的变量占 4个字节Long 类型的变量占8个字节一个程序就是一个世界,变量是这个程序
- FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK。这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK
- 前言需求使用freemarker生成的静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch。毕竟有
- 在第一次启动项目的时候,由于使用了RabbitMQ的默认guest账号,怎么也登不进去,后来还是在Admin重新创建了一个其他的账号,然后开
- EF的基本使用 一、EF的创建二、修改数据库一、加数据库字段二、加数据库 表 一、EF的创建第一步: 创建一个类库第二步: 选择类库第三步:
- 如下所示:public static String reThreeStr(String ss){boolean result= ss.mat
- Android中的传递有两个方法,一个是Serializable,另一个是Parcelable。Serializable是J2SE本身就支持
- 说明:本文记录如何在Idea下,利用Maven管理项目,并整合SSM(Spring + Spring MVC +Mybatis)框架,实现简
- 代码:package com.lwj.test.proxy;import java.lang.reflect.InvocationHandl
- 首先,思考这么一种场景,假如现在A类继承了B类和C类,并且B类和C类中,都存在test()方法,那么当A类对象调用test()方法时,该调用
- 前述园子里有许多人对log4net这款开源的日志记录控件有很多介绍。在这里个人再做一次总结,希望对以后有所帮助,需要的时候可以直接使用,减少
- 本文实例讲述了C#采用OpenXml实现给word文档添加文字的方法,分享给大家供大家参考。具体方法如下:一般来说,使用OpenXml给wo
- 一、Fork/Join框架的理解ForkJoinTask类属于java.util.concurrent 包下;ForkJoinTask类下有
- Maven的安装安装Maven之前要确保已经安装好了jdk,并且配置好了环境变量JAVA_HOME。具体安装步骤如下:1. 从ap
- 本文以一个非常简单的实例讲述了Winform实现抓取web页面内容的方法,代码简洁易懂,非常实用!分享给大家供大家参考。具体实现代码如下:W
- 前言在做JAVA EE开发的过程中,更多的是使用框架来提高开发效率.越来越发现,之前很基础的一些东西,都忘记的差不多了.从今天开始慢慢的复习
- 进度条样式在项目中经常可以见到,下面小编给大家分享Android三种方式实现ProgressBar自定义圆形进度条。Android进度条有4
- 为了让大家知道下面内容是否是自己想要的,我先发效果图。好了,那就开始贴代码了以下为一个按钮的事件,为裁剪准备图片、裁剪路径、保存路径priv
- 记得当初自己刚开始学习Java的时候,对Java的IO流这一块特别不明白,所以写了这篇随笔希望能对刚开始学习Java的人有所帮助,也方便以后