spring-orm:6 HibernateJpaVendorAdapter源码解析

版本

spring-orm:6.1.3

源码

org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter

public class HibernateJpaVendorAdapter extends AbstractJpaVendorAdapter {// 旧版本Hibernate的方言类是否存在标识private static final boolean oldDialectsPresent = ClassUtils.isPresent("org.hibernate.dialect.PostgreSQL95Dialect", HibernateJpaVendorAdapter.class.getClassLoader());// jpa方言private final HibernateJpaDialect jpaDialect = new HibernateJpaDialect();...// 构建Jpa属性private Map<String, Object> buildJpaPropertyMap(boolean connectionReleaseOnClose) {Map<String, Object> jpaProperties = new HashMap<>();// 从 spring.jpa.database-platform 属性获取方言类名if (getDatabasePlatform() != null) {jpaProperties.put(AvailableSettings.DIALECT, getDatabasePlatform());}else {// 根据 spring.jpa.database 属性获取方言类Class<?> databaseDialectClass = determineDatabaseDialectClass(getDatabase());if (databaseDialectClass != null) {jpaProperties.put(AvailableSettings.DIALECT, databaseDialectClass.getName());}}// 如果设置了 spring.jpa.generate-ddl=true 则设置 hibernate.hbm2ddl.auto=updateif (isGenerateDdl()) {jpaProperties.put(AvailableSettings.HBM2DDL_AUTO, "update");}// 如果设置了 spring.jpa.show-sql=true, 则设置 hibernate.show_sql=trueif (isShowSql()) {jpaProperties.put(AvailableSettings.SHOW_SQL, "true");}// 如果需要在关闭会话时释放连接, 则设置 hibernate.connection.handling_mode=DELAYED_ACQUISITION_AND_HOLD (延迟获取,关闭会话时释放连接)if (connectionReleaseOnClose) {jpaProperties.put(AvailableSettings.CONNECTION_HANDLING,PhysicalConnectionHandlingMode.DELAYED_ACQUISITION_AND_HOLD);}// For SpringBeanContainer to be called on Hibernate 6.2jpaProperties.put("hibernate.cdi.extensions", "true");return jpaProperties;}// 根据数据库类型决定方言类protected Class<?> determineDatabaseDialectClass(Database database) {// 根据旧版本Hibernate的方言类是否存在判断Hibernate版本if (oldDialectsPresent) {  // Hibernate版本低于6.2return switch (database) {case DB2 -> DB2Dialect.class;case DERBY -> DerbyTenSevenDialect.class;case H2 -> H2Dialect.class;case HANA -> HANAColumnStoreDialect.class;case HSQL -> HSQLDialect.class;case INFORMIX -> Informix10Dialect.class;case MYSQL -> MySQL57Dialect.class;case ORACLE -> Oracle12cDialect.class;case POSTGRESQL -> PostgreSQL95Dialect.class;case SQL_SERVER -> SQLServer2012Dialect.class;case SYBASE -> SybaseDialect.class;default -> null;};}else {  // Hibernate版本高于6.2(包含)return switch (database) {case DB2 -> DB2Dialect.class;case DERBY -> org.hibernate.dialect.DerbyDialect.class;case H2 -> H2Dialect.class;case HANA -> HANAColumnStoreDialect.class;case HSQL -> HSQLDialect.class;case MYSQL -> MySQLDialect.class;case ORACLE -> OracleDialect.class;case POSTGRESQL -> org.hibernate.dialect.PostgreSQLDialect.class;case SQL_SERVER -> SQLServerDialect.class;case SYBASE -> SybaseDialect.class;default -> null;};}}

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

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

相关文章

顶顶通实时质检系统如何添加词库

文章目录 前言联系我们步骤1. 导入系统预置词库2. 手动添加词库 在实时质检时如何质检到词库 前言 本篇文章主要讲解顶顶通实时质检系统如何添加词库。 词库添加的方式&#xff1a; 导入系统预置词库手动添加词库 联系我们 有意向了解实时质检系统的用户&#xff0c;可以点击…

邦芒支招:6个建议帮你找到合适的工作

说起来&#xff0c;今年找工作对很多毕业生确实不利&#xff0c;受大环境影响&#xff0c;很多小微企业难以为继&#xff0c;甚至大企业也在缩减人员&#xff0c;人才需求量总体降低了&#xff0c;但是&#xff0c;毕业生那么多&#xff0c;导致有一部分大学生迟迟找不到工作。…

web基础及http协议 (二) apache

一、httpd 安装组成 http 服务基于 C/S 结构 1 .常见http 服务器程序 httpd apache&#xff0c;存在C10K&#xff08;10K connections&#xff09;问题 nginx 解决C10K问题lighttpd IIS .asp 应用程序服务器 tomcat .jsp 应用程序服务器 jetty 开源的servlet容器&#xf…

[SSD 测试 1.3] 硬件测试之主控测试用例

专栏 《深入理解SSD》 主控制器方面,消费级市场的主要厂商包括三星、英特尔、西部数据、海力士和东芝,他们的产品涵盖了SATA和Nvme Pcie3.0/4.0接口。而在企业级市场,国内厂商华为海思H181x系列也有存在。在实际速度方面,该速度会受到制程及后端Nand Flash接口速率和通道数…

Postgresql源码(124)两个事务更新同一行数据时的行为和原理分析

XactLockTableWait函数、transactionid锁的一些原理和分析 结论 更新行时&#xff0c;会根据xmax拿transactionid锁&#xff0c;等对应的事务结束。 如果结束是回滚&#xff0c;则heap_update继续更新。如果结束时提交&#xff0c;则heap_update要返回上层ExecUpdate调用EvalP…

用Dockerfile创建PostgreSQL数据库

官网下载基本镜像 [rootlocalhost ~]# docker pull postgres:latest创建项目目录 [rootlocalhost ~]# mkdir /root/postgresql创建一个名为 “Dockerfile” 的文件 [rootlocalhost ~]# vim Dockerfile # 使用官方的PostgreSQL镜像 FROM postgres:latest# 设置环境变量&#…

10款ai文生图软件/网站推荐

1. Ai-Chat 推荐指数&#xff1a;⭐⭐⭐⭐ 链接&#xff1a; https://mmm.aiyujiang.com/ 上传图片并输入AI提示词就能一键生成各类动漫、卡通风格头像&#xff0c;算法强大&#xff0c;风格多样&#xff0c;一键开启你的AI自由创作之旅。有电脑版和手机版&#xff0c;也是很…

大数据信用报告查询方式一般有几种?哪种比较好?

在了解这个问题之前&#xff0c;想必你对大数据信用与人行信用的区别都是比较清楚了&#xff0c;本文呢就着重讲一下大数据信用报告查询方式有几种&#xff0c;哪种比较好&#xff0c;感兴趣的朋友不妨一起去看看。 大数据信用报告常见的三种查询方式&#xff1a; 一、二维码分…

手持三防平板丨国产化加固平板丨国产三防平板发展的意义是什么?

随着现代科技的快速发展&#xff0c;平板电脑在我们的生活中扮演着越来越重要的角色。然而&#xff0c;传统的平板电脑只能在普通的环境中使用&#xff0c;而无法在恶劣的环境中使用&#xff0c;例如在高海拔、高温、高湿度、沙漠等环境中&#xff0c;传统平板电脑往往会出现故…

目标检测教程视频指南大全

魔鬼面具-哔哩哔哩视频指南 必看干货系列(建议搞深度学习的小伙伴都看看,特别是图像相关) 深度学习常见实验问题与实验技巧(适用于所有模型&#xff0c;小白初学者必看!)还在迷茫深度学习中的改进实验应该从哪里开始改起的同学&#xff0c;一定要进来看看了&#xff01;用自身…

利用PaddleNLP进行文本数据脱敏

最近在脱敏一些客服数据&#xff0c;同事用正则进行了一些处理&#xff0c;但是感觉针对人名、数量等信息还是无法处理&#xff0c;例如“北方种植了很多李子树”&#xff0c;李子树有可能被识别为人名&#xff0c;又如“美国采购坦克1005台&#xff0c;价值4500万比索”&#…

图的遍历(广度优先遍历BFS,深度优先遍历DFS)

目录 图的遍历概念&#xff1a; 图的广度优先遍历&#xff08;BFS&#xff09;&#xff1a; 代码实现如下&#xff1a; 测试如下&#xff1a; 注意&#xff1a; 图的深度优先遍历&#xff08;DFS&#xff09;&#xff1a; 代码实现如下&#xff1a; 测试如下&#xff1…

Web服务器基础

Web服务器基础 【一】前端概述 【1】HTML HTML&#xff08;超文本标记语言&#xff09;是用于创建网页结构的标记语言。它定义了网页的骨架&#xff0c;包括标题、段落、列表、链接等元素&#xff0c;但没有样式。可以将HTML视为网页的结构和内容的描述。 【2】CSS css&…

阿里云服务器镜像是什么?如何选择镜像?

阿里云服务器镜像怎么选择&#xff1f;云服务器操作系统镜像分为Linux和Windows两大类&#xff0c;Linux可以选择Alibaba Cloud Linux&#xff0c;Windows可以选择Windows Server 2022数据中心版64位中文版&#xff0c;阿里云服务器网aliyunfuwuqi.com来详细说下阿里云服务器操…

Go 是否有三元运算符?Rust 和 Python 是怎么做的?

嗨&#xff0c;大家好&#xff01;本文是系列文章 Go 技巧第十四篇&#xff0c;系列文章查看&#xff1a;Go 语言技巧。 今天来聊聊在 Go 语言中是否支持三元运算符。这个问题很简单&#xff0c;没有。 首先&#xff0c;什么是三元运算符&#xff1f; 在其他一些编程语言中&a…

MySQL篇之分库分表

一、为什么要分库分表 1.目的 1. 分担了访问压力 2. 解决存储压力 2.分库分表的时机 1. 前提&#xff0c;项目业务数据逐渐增多&#xff0c;或业务发展迅速&#xff0c;单表的数据量达1000W或20G以后。 2. 优化已解决不了性能问题&#xff08;主从读写分离、查询索引…&am…

Python | Conda常用命令

一、介绍 1、Anaconda工具 Anaconda是一个用于数据科学和机器学习的开源软件包管理器和环境管理器。它包含了许多流行的数据科学工具和库&#xff0c;如Python、Jupyter Notebook、numpy、pandas、scikit-learn等&#xff0c;可以帮助用户轻松地管理和安装这些工具和库。Anaco…

数据库管理-第152期 Oracle Vector DB AI-04(20240220)

数据库管理152期 2024-02-20 数据库管理-第152期 Oracle Vector DB & AI-04&#xff08;20240220&#xff09;1 常用的向量检索方法聚类图搜索哈希量化 2 Oracle Vector DB中的索引索引&#xff08;默认&#xff09; 索引&#xff08;高级&#xff09;3 EMBEDDINGSSQL EMBE…

masscan使用

masscan简介: masscan 是一种快速的端口扫描工具&#xff0c;旨在快速扫描大量IP地址和端口。masscan的发包速度非常快&#xff0c;在windows中&#xff0c;它的发包速度可以达到每秒30万包&#xff1b;在Linux中&#xff0c;速度可以达到每秒160万。masscan在扫描时会随机选择…

阿里云备案服务器买哪种?多少钱?有什么限制条件?

在阿里云备案服务器需要多少钱&#xff1f;目前符合备案条件的阿里云服务器只要30元&#xff0c;并且这台云服务器可以备案5个网站。2核4G配置&#xff0c;价格为30元3个月&#xff0c;也可以选择2核2G轻量服务器&#xff0c;61元一年&#xff0c;阿里云老用户还可以选择99元一…