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());}...}...
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/673094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

12.JavaScript(WebAPI) - JS api文献精解

文章目录 1.WebAPI 背景知识1.1什么是 WebAPI1.2什么是 API1.3API 参考文档 2.DOM 基本概念2.1什么是 DOM2.2DOM 树 3.获取元素3.1querySelector3.2querySelectorAll 4.事件初识4.1基本概念4.2事件三要素4.3简单示例 5.操作元素5.1获取/修改元素内容5.1.1innerText5.1.2innerHT…

代码随想录算法训练营|day29

第七章 回溯算法 491.递增子序列46.全排列47.全排列II代码随想录文章详解总结 491.递增子序列 同层去重&#xff0c;只需保证当前层元素不重复即可【前仆后继的感觉】 func findSubsequences(nums []int) [][]int {res, path : [][]int{}, []int{}var help func(nums []int, …

EMC学习笔记(二十一)降低EMI的PCB设计指南(一)

降低EMI的PCB设计指南&#xff08;一&#xff09; 1.概述2.射频3.连接器与过孔元件4.静态引脚和动态引脚和输入5.基本回路6.差模与共模 tips&#xff1a;资料主要来自网络&#xff0c;仅供学习使用。 1.概述 印刷电路板(PCB)的一般布局准则&#xff0c;基本上都有相对的文件进…

C++重新入门-C++变量作用域

目录 1.C变量定义 2.C作用域 3.局部变量 4.全局变量 5.块作用域变量 6.初始化局部变量和全局变量 1.C变量定义 一般来说有三个地方可以定义变量&#xff1a; 在函数或一个代码块内部声明的变量&#xff0c;称为局部变量。 在函数参数的定义中声明的变量&#xff0c;称为…

Acwing---835. Trie字符串统计

Trie字符串统计 1.题目2.基本思想3.代码实现 1.题目 维护一个字符串集合&#xff0c;支持两种操作&#xff1a; I x 向集合中插入一个字符串 x&#xff1b;Q x 询问一个字符串在集合中出现了多少次。 共有 N个操作&#xff0c;所有输入的字符串总长度不超过 1 0 5 10^5 105…

2024/2/7 图的基础知识

图的存储 B3643 图的存储 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a;mp[n][n]用来存邻接矩阵&#xff0c;二维vector用来存每个点连的点 完整代码&#xff1a; #include <bits/stdc.h> #define int long long const int N 1e5 10; int n, m; …

【算法】【数据结构】算法与数据结构的关系

程序算法数据结构语言工具和环境 但在算法学习过程中&#xff0c;我认识到算法和数据结构是密不可分的&#xff0c;脱离数据结构谈论算法是空架子。 算法&#xff1a;解决问题的步骤和方法。对数据进行操作和处理的方法。 数据结构&#xff1a;用来存储数据的方式。 数据结构和…

【教程】Linux使用git自动备份和使用支持文件恢复的rm命令

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 背景介绍 首先非常不幸地告诉你&#xff1a;Linux 系统的标准 rm 命令不支持文件恢复功能。一旦使用 rm 删除了文件或目录&#xff0c;它们就会从文件系统中永久删除&#xff0c;除非你使用专门的文件恢复工具尝试…

2.7作业

分别通过select、多进程、多线程实现一个并发服务器 select #include <myhead.h> #define PORT 8888 #define IP "192.168.250.100" int main(int argc, const char *argv[]) {//1、创建用于接受连接的套接字int sfd socket(AF_INET, SOCK_STR…

C++ || 模板初阶 | 函数模板 | 类模板

泛型编程 泛型编程&#xff0c;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础。 可以理解为活字印刷术类似的方式。 函数模板 函数模板概念 函数模板&#xff0c;代表一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用…

Centos7.9安装SQLserver2017数据库

Centos7.9安装SQLserver2017数据库 一、安装前准备 挂载系统盘 安装依赖 yum install libatomic* -y 二、yum方式安装 # 配置 yum 源 wget -O /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repoyum clean all yum…

c++恶魔轮盘(投票)

在此投票关于这个游戏的功能 2的传送门&#xff1a;点我

洛谷:P1219 [USACO1.5] 八皇后 Checker Challenge(dfs深度优先遍历求解)

题目描述 一个如下的 6666 的跳棋棋盘&#xff0c;有六个棋子被放置在棋盘上&#xff0c;使得每行、每列有且只有一个&#xff0c;每条对角线&#xff08;包括两条主对角线的所有平行线&#xff09;上至多有一个棋子。 上面的布局可以用序列 2 4 6 1 3 52 4 6 1 3 5 来描述&am…

Bagging的随机森林;Boosting的AdaBoost和GBDT

集成学习应用实践 import numpy as np import os %matplotlib inline import matplotlib import matplotlib.pyplot as plt plt.rcParams[axes.labelsize] 14 plt.rcParams[xtick.labelsize] 12 plt.rcParams[ytick.labelsize] 12 import warnings warnings.filterwarnin…

【保姆级教程|YOLOv8改进】【7】多尺度空洞注意力(MSDA),DilateFormer实现暴力涨点

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

websocket具体实践

websocket具体实践 参考&#xff1a; 如何使用websocket WebSocket客户端连接不上和掉线的问题以及解决方案 继6月份对websocket一顿了解之后&#xff0c;我们的项目也要上websocket了&#xff0c;虽然这部分不是我做&#xff0c;但是借此机会&#xff0c;我也想要尝试一下&am…

Golang gorm 结构体定义使用

一、定义一个用户注册的结构体 条件&#xff1a;1、用户名和密码不能为空&#xff0c;用户名长度大于2小于12 密码长度大于6小于12 type UserRegisterForm struct {UserName string json:"username" form:"username" query:"username" bindin…

vue3:28— Vue 2 对 Vue 3 的所有非兼容性改变。(vue3学习笔记终)

非兼容性改变 | Vue 3 迁移指南 过渡类名v-enter 修改为 v-enter-from、过渡类名 v-leave 修改为 v-leave-from 。keyCode 作为 v-on 修饰符的支持。v-model 指令在组件上的使用已经被重新设计&#xff0c;替换掉了v-bind.sync.v-if 和 v-for 在同一个元素身上使用时的优先级发…

VS无法使用万能头文件#include <bits/stdc++.h> 的解决办法

第一步在vs中打出可以使用的头文件 如#include<cmath> 点击F12转到文档 上面窗口右键找到打开所在文件夹 创建一个名字为bits的文件夹 里面创建一个text文件 // C includes used for precompiling -*- C -*-// Copyright (C) 2003-2015 Free Software Foundation, In…

【开源】JAVA+Vue.js实现开放实验室管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…