spring.jpa.hibernate 配置和源码解析
版本
spring-boot:3.2.2
hibernate:6.4.1.Final
配置项目
DDL模式
生成定义语句修改表结构
- 配置路径:spring.jpa.hibernate.ddl-auto
- 配置值:org.hibernate.tool.schema.Action枚举类型值
可选值:
| 可选值 | 说明 |
|---|---|
| none | 默认值。不操作 |
| create-only | 当使用嵌入式数据库且没有模式管理器时,此项为默认值。创建,如果已存在将报错 |
| drop | 删除 |
| create | 删除后再创建 |
| create-drop | 先删除,SessionFactory启动时创建,SessionFactory关闭时再删除 |
| validate | 仅校验 |
| update | 必要时更新 |
| truncate | 清空数据 |
隐式命名策略
如果没有通过@Table或者@Column等注解显式指定表名、列名,将通过隐式命名策略生成对应名称
- 配置路径: spring.jpa.hibernate.naming.implicit-strategy
- 配置值:指定实现 org.hibernate.boot.model.naming.ImplicitNamingStrategy 接口的类全名
- 默认值: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
可选官方实现:
| 类名 | 说明 |
|---|---|
| org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl | 匹配JPA2.0标准的实现,使用JPA注解指派的名称或者根据类名属性名。其他实现都继承于此类。 |
| org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy | 默认值。重写了关联连接表名规则 |
| org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl | 重写了 AttributePath 转换规则,解析为完整路径 |
| org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl | 命名不依赖任何JPA注解 |
| org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl | 匹配JPA1.0标准的实现 |
物理命名策略
将显式指定或隐式命名策略转换得到的逻辑名称转换为数据库实际使用的物理名称
- 配置路径:spring.jpa.hibernate.naming.physical-strategy
- 配置值:指定实现 org.hibernate.boot.model.naming.PhysicalNamingStrategy 接口的类全名
- 默认值:org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
可选官方实现:
| 类名 | 说明 |
|---|---|
| org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy | 将驼峰规则的命名转换为下划线规则 |
| org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl | 保持与逻辑名称一致,不做任何转换 |
源码
spring-boot-autoconfigure
org/springframework/boot/autoconfigure/orm/jpa/HibernateProperties.java
@ConfigurationProperties("spring.jpa.hibernate")
public class HibernateProperties {// 命名策略配置private final Naming naming = new Naming();// DDL模式配置private String ddlAuto;...// 读取DDL模式配置,按优先级读取配置或默认值private String determineDdlAuto(Map<String, String> existing, Supplier<String> defaultDdlAuto) {// 1. 获取hibernate.hbm2ddl.auto配置值String ddlAuto = existing.get(AvailableSettings.HBM2DDL_AUTO);if (ddlAuto != null) {return ddlAuto;}// 2. 获取spring.jpa.hibernate.ddl-auto配置值if (this.ddlAuto != null) {return this.ddlAuto;}// 3. 获取jakarta.persistence.schema-generation.database.action配置值if (existing.get(AvailableSettings.JAKARTA_HBM2DDL_DATABASE_ACTION) != null) {return null;}// 4. 默认为nullreturn defaultDdlAuto.get();}// 命名策略配置类public static class Naming {// 应用命名策略(没有配置属性则填充默认值)private void applyNamingStrategies(Map<String, Object> properties) {applyNamingStrategy(properties, AvailableSettings.IMPLICIT_NAMING_STRATEGY, this.implicitStrategy,() -> SpringImplicitNamingStrategy.class.getName());applyNamingStrategy(properties, AvailableSettings.PHYSICAL_NAMING_STRATEGY, this.physicalStrategy,() -> CamelCaseToUnderscoresNamingStrategy.class.getName());}...}...
}
相关文章:
spring.jpa.hibernate 配置和源码解析
版本 spring-boot:3.2.2 hibernate:6.4.1.Final 配置项目 DDL模式 生成定义语句修改表结构 配置路径:spring.jpa.hibernate.ddl-auto配置值:org.hibernate.tool.schema.Action枚举类型值 可选值: 可选值说明none默认值。不操作create-…...
2019年江苏省职教高考计算机技能考试——一道程序改错题的分析
题目:函数将str字符串中的5个数字字符串转换为整数,并保存在二维数组m的最后一行,各元素为3、-4、16、18、6。并经函数move处理后,运行结果如下: 18 6 3 -4 16 16 18 6 3 -4 -4 16 …...
邦芒支招:职场白领必备的10条护身符
在职场生存除了小心驶得万年船,怎样躲过不长眼的办公室风暴,职场八卦及不成为上司利益的牺牲品呢?职场就是个小社会,人际关系说复杂也复杂,说简单也简单。现在送你10道有用的职场护身符,希望你能够通过利…...
python实现飞书群机器人消息通知(消息卡片)
python实现飞书群机器人消息通知 直接上代码 """ 飞书群机器人发送通知 """ import time import urllib3 import datetimeurllib3.disable_warnings()class FlybookRobotAlert():def __init__(self):self.webhook webhook_urlself.headers {…...
网站服务器中毒或是被入侵该怎么办?
随着互联网的普及和发展,网站服务器已经成为企业和个人不可或缺的资源。然而,网络安全问题也日益突出,其中服务器中毒或被入侵是常见的问题之一。一旦服务器中毒或被入侵,不仅会导致数据泄露、网站瘫痪等严重后果,还可…...
Skywalking 学习之ByteBuddy 方法执行时间监控
Skywalking git: GitHub - apache/skywalking: APM, Application Performance Monitoring System 集成入门: 10分钟3个步骤集成使用SkyWalking - 知乎 企业级监控项目Skywalking详细介绍,来看看呀-CSDN博客 下面自己学习了一下ByteBuddy的…...
idea vim配置
"basemap "source $cnfpath/nvim/cnf/basemap.vim """"""""""""""""""""" " 自动设置 """""""""…...
kafka排除zookeeper使用kraft的最新部署方案
kafka在新版本中已经可以不使用zookeeper进行服务部署,排除zookeeper的部署方案可以节省一些服务资源,这里使用 kafka_2.13-3.6.1.tgz 版本进行服务部署。 测试部署分为三个服务器: 服务器名称服务器IP地址test01192.168.56.101test02192.1…...
SQL Server数据库日志查看若已满需要清理的三种解决方案
首先查看获取实例中每个数据库日志文件大小及使用情况,根据数据库日志占用百分比来清理 DBCC SQLPERF(LOGSPACE) 第一种解决方案: 在数据库上点击右键 → 选择 属性 → 选择 文件,然后增加数据库日志文件的文件大小。 第二种解决方案 手动…...
人工智能 | 深度学习的进展
深度学习的进展 深度学习是人工智能领域的一个重要分支,它利用神经网络模拟人类大脑的学习过程,通过大量数据训练模型,使其能够自动提取特征、识别模式、进行分类和预测等任务。近年来,深度学习在多个领域取得了显著的进展&#…...
玩转Java8新特性
背景 说到Java8新特性,大家可能都耳濡目染了,代码中经常使用遍历stream流用到不同的api了,但是大家有没有想过自己也自定义个函数式接口呢,目前Java8自带的四个函数式接口,比如Function、Supplier等 stream流中也使用…...
EasyRecovery2024永久免费版电脑数据恢复软件下载
EasyRecovery数据恢复软件是一款非常好用且功能全面的工具,它能帮助用户恢复各种丢失或误删除的数据。以下是关于EasyRecovery的详细功能介绍以及下载步骤: EasyRecovery-mac最新版本下载:https://wm.makeding.com/iclk/?zoneid50201 EasyRecovery-win…...
QQ音乐新版客户端的音乐无法解密?来看看解决方法!音乐解锁工具Web+批处理版本合集,附常见问题及解决方法!
一、软件简介 一般会员制音乐软件(如某抑云,某鹅,某狗音乐)的歌曲下载后都是加密格式,加密格式的音乐只能在特定的播放器中才能播放,在其他音乐播放器和设备中则无法识别和播放。音乐解锁工具的作用就是将…...
2023年12月CCF-GESP编程能力等级认证C++编程一级真题解析
一、单选题(共15题,共30分) 第1题 以下C++不可以作为变量的名称的是( )。 A:CCF GESP B:ccfGESP C:CCFgesp D:CCF_GESP 答案:A 第2题 C++表达式 10 - 3 * (2 + 1) % 10 的值是( )。 A:0 B:1 C:2 D:3 答案:B 第3题 假设现在是上午十点,求出N小时(正整数…...
如何决定K8S Pod的剔除优先级
在Kubernetes(k8s)中,当节点资源面临压力时,如何决定Pod的优先级是一个关键问题。在Kubernetes 1.8版本之后,引入了基于Pod优先级的调度策略,即Pod Priority Preemption。这种策略允许在资源不足的情况下&a…...
【JavaScript】数据类型
文章目录 1. 数字(Number)2. 字符串(String)3. 布尔(Boolean)4. 对象(Object)5. 数组(Array)6. Undefined 和 Null7. typeof 操作符总结 在 JavaScript 中&am…...
JAVA:单例模式提高性能和安全性的优化技巧
1、简述 单例模式是一种常用的设计模式,用于确保一个类只有一个实例,并提供全局访问点。在 Java 中,单例模式的优化不仅可以提高性能,还可以增强安全性和可维护性。本文将介绍一些关键的技巧和最佳实践,帮助你优化单例…...
如何在 Ubuntu 上安装 ONLYOFFICE 文档 8.0
通过使用社区版,您有能力在您自己的服务器上部署 ONLYOFFICE 文档,从而使在线编辑器与 ONLYOFFICE 协作平台或其他热门系统进行无缝集成。 ONLYOFFICE 文档是什么 ONLYOFFICE 文档是一款全面的在线办公工具,提供了文本文档…...
什么是大模型
目录 让你了解什么是大模型什么是大模型?大模型的应用场景常见的大模型技术实例分析:深度学习语言模型GPT-3 让你了解什么是大模型 大模型(Big Model)是指在机器学习和人工智能领域中处理大规模数据和复杂模型的一种方法或技术。…...
C#在既有数组中插入另一个数组:Array.Copy方法 vs 自定义插入方法
目录 一、使用的方法 1.使用Array.Copy方法 2.Copy(Array, Int32, Array, Int32, Int32) 3. 使用自定义的方法 二、实例 1.示例1:使用Array.Copy方法 2.示例2:使用自定义的方法 一、使用的方法 1.使用Array.Copy方法 首先定义了一个名为InsertAr…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...
