@@ -5,19 +5,19 @@ summary: 学习如何使用 Hibernate 连接 TiDB。本教程提供了可与 TiD
55
66# 使用 Hibernate 连接 TiDB
77
8- TiDB 是一个兼容 MySQL 的数据库 ,[ Hibernate] ( https://hibernate.org/orm/ ) 是一个流行的开源 Java ORM。从 ` 6.0.0.Beta2 ` 版本开始, Hibernate 支持 TiDB 方言,能够很好地适配 TiDB 的特性 。
8+ TiDB 是一个 MySQL 兼容的数据库 ,[ Hibernate] ( https://hibernate.org/orm/ ) 是流行的开源 Java ORM。由于 TiDB 与 MySQL 高度兼容,建议你将 ` org.hibernate.dialect.MySQLDialect ` 作为 Hibernate 的 dialect,以获得长期兼容性。或者,你也可以使用 TiDB 专用的 dialect( ` org.hibernate.community.dialect.TiDBDialect ` ),该 dialect 可在 [ Hibernate community dialects ] ( https://github.com/hibernate/hibernate-orm/tree/main/hibernate-community-dialects ) 中找到,但并非由 PingCAP 维护。如果你在使用 ` MySQLDialect ` 时遇到任何兼容性问题,可以在 GitHub 上提交 [ issue ] ( https://github.com/pingcap/tidb/issues ) 。
99
1010在本教程中,你可以学习如何使用 TiDB 和 Hibernate 完成以下任务:
1111
1212- 搭建你的环境。
1313- 使用 Hibernate 连接到你的 TiDB 集群。
14- - 构建并运行你的应用程序。你还可以在 [ 示例代码片段] ( #sample-code-snippets ) 中找到基本 CRUD 操作的示例代码 。
14+ - 构建并运行你的应用程序。你还可以在 [ 示例代码片段] ( #sample-code-snippets ) 中找到基本 CRUD 操作的代码示例 。
1515
16- > ** Note: **
16+ > ** 注意: **
1717>
18- > 本教程适用于 TiDB Cloud Starter, TiDB Cloud Essential, TiDB Cloud Dedicated 和 TiDB 自建版 。
18+ > 本教程适用于 TiDB Cloud Starter、 TiDB Cloud Essential、 TiDB Cloud Dedicated 以及自建 TiDB。
1919
20- ## 前置条件
20+ ## 前提条件
2121
2222完成本教程,你需要:
2323
@@ -30,24 +30,24 @@ TiDB 是一个兼容 MySQL 的数据库,[Hibernate](https://hibernate.org/orm/
3030
3131** 如果你还没有 TiDB 集群,可以按如下方式创建:**
3232
33- - (推荐)参考 [ 创建 TiDB Cloud Starter 集群] ( /develop/dev-guide-build-cluster-in-cloud.md ) 创建你自己的 TiDB Cloud 集群。
34- - 参考 [ 部署本地测试 TiDB 集群] ( /quick-start-with-tidb.md#deploy-a-local-test-cluster ) 或[ 部署生产环境 TiDB 集群] ( /production-deployment-using-tiup.md ) 创建本地集群。
33+ - (推荐)参照 [ 创建 TiDB Cloud Starter 集群] ( /develop/dev-guide-build-cluster-in-cloud.md ) 创建属于你自己的 TiDB Cloud 集群。
34+ - 参照 [ 部署本地测试 TiDB 集群] ( /quick-start-with-tidb.md#deploy-a-local-test-cluster ) 或 [ 部署生产环境 TiDB 集群] ( /production-deployment-using-tiup.md ) 创建本地集群。
3535
3636</CustomContent >
3737<CustomContent platform =" tidb-cloud " >
3838
3939** 如果你还没有 TiDB 集群,可以按如下方式创建:**
4040
41- - (推荐)参考 [ 创建 TiDB Cloud Starter 集群] ( /develop/dev-guide-build-cluster-in-cloud.md ) 创建你自己的 TiDB Cloud 集群。
42- - 参考 [ 部署本地测试 TiDB 集群] ( https://docs.pingcap.com/tidb/stable/quick-start-with-tidb#deploy-a-local-test-cluster ) 或[ 部署生产环境 TiDB 集群] ( https://docs.pingcap.com/tidb/stable/production-deployment-using-tiup ) 创建本地集群。
41+ - (推荐)参照 [ 创建 TiDB Cloud Starter 集群] ( /develop/dev-guide-build-cluster-in-cloud.md ) 创建属于你自己的 TiDB Cloud 集群。
42+ - 参照 [ 部署本地测试 TiDB 集群] ( https://docs.pingcap.com/tidb/stable/quick-start-with-tidb#deploy-a-local-test-cluster ) 或 [ 部署生产环境 TiDB 集群] ( https://docs.pingcap.com/tidb/stable/production-deployment-using-tiup ) 创建本地集群。
4343
4444</CustomContent >
4545
4646## 运行示例应用连接 TiDB
4747
48- 本节演示如何运行示例应用代码并连接到 TiDB。
48+ 本节演示如何运行示例应用代码并连接 TiDB。
4949
50- ### 第 1 步 :克隆示例应用仓库
50+ ### 步骤 1 :克隆示例应用仓库
5151
5252在终端窗口中运行以下命令,克隆示例代码仓库:
5353
@@ -56,33 +56,33 @@ git clone https://github.com/tidb-samples/tidb-java-hibernate-quickstart.git
5656cd tidb-java-hibernate-quickstart
5757```
5858
59- ### 第 2 步 :配置连接信息
59+ ### 步骤 2 :配置连接信息
6060
6161根据你选择的 TiDB 部署方式,连接到你的 TiDB 集群。
6262
6363<SimpleTab >
6464<div label =" TiDB Cloud Starter or Essential " >
6565
66- 1 . 进入 [ ** Clusters** ] ( https://tidbcloud.com/console/clusters ) 页面,然后点击目标集群名称进入其概览页面 。
66+ 1 . 进入 [ ** Clusters** ] ( https://tidbcloud.com/console/clusters ) 页面,然后点击目标集群名称,进入其概览页面 。
6767
68682 . 点击右上角的 ** Connect** ,弹出连接对话框。
6969
70- 3 . 确保连接对话框中的配置与你的操作环境一致 。
70+ 3 . 确保连接对话框中的配置与你的运行环境一致 。
7171
7272 - ** Connection Type** 设置为 ` Public `
7373 - ** Branch** 设置为 ` main `
7474 - ** Connect With** 设置为 ` General `
75- - ** Operating System** 与你的环境一致
75+ - ** Operating System** 与你的环境匹配
7676
77- > ** Tip: **
77+ > ** 提示: **
7878 >
7979 > 如果你的程序运行在 Windows Subsystem for Linux (WSL) 中,请切换到对应的 Linux 发行版。
8080
81- 4 . 点击 ** Generate Password** 生成一个随机密码 。
81+ 4 . 点击 ** Generate Password** 生成随机密码 。
8282
83- > ** Tip: **
83+ > ** 提示: **
8484 >
85- > 如果你之前已经创建过密码 ,可以继续使用原密码,或者点击 ** Reset Password** 生成新密码。
85+ > 如果你之前已创建过密码 ,可以继续使用原密码,或点击 ** Reset Password** 生成新密码。
8686
87875 . 运行以下命令,复制 ` env.sh.example ` 并重命名为 ` env.sh ` :
8888
@@ -101,7 +101,7 @@ cd tidb-java-hibernate-quickstart
101101 export USE_SSL='true'
102102 ` ` `
103103
104- 请务必将 ` {}` 占位符替换为连接对话框中获取的连接参数 。
104+ 请务必将 ` {}` 占位符替换为连接对话框中获得的连接参数 。
105105
106106 TiDB Cloud Starter 需要安全连接,因此你需要将 ` USE_SSL` 的值设置为 ` true` 。
107107
@@ -110,15 +110,15 @@ cd tidb-java-hibernate-quickstart
110110< /div>
111111< div label=" TiDB Cloud Dedicated" >
112112
113- 1. 进入 [** Clusters** ](https://tidbcloud.com/console/clusters) 页面,然后点击目标集群名称进入其概览页面 。
113+ 1. 进入 [** Clusters** ](https://tidbcloud.com/console/clusters) 页面,然后点击目标集群名称,进入其概览页面 。
114114
1151152. 点击右上角的 ** Connect** ,弹出连接对话框。
116116
1171173. 在连接对话框中,从 ** Connection Type** 下拉列表选择 ** Public** ,然后点击 ** CA cert** 下载 CA 证书。
118118
119- 如果你还没有配置 IP 访问列表,请点击 ** Configure IP Access List** ,或参考 [Configure an IP Access List ](https://docs.pingcap.com/tidbcloud/configure-ip-access-list) 进行配置后再首次连接 。
119+ 如果你尚未配置 IP 访问列表,请点击 ** Configure IP Access List** ,或参照 [配置 IP 访问列表 ](https://docs.pingcap.com/tidbcloud/configure-ip-access-list) 进行首次连接前的配置 。
120120
121- 除了 ** Public** 连接类型 ,TiDB Cloud Dedicated 还支持 ** Private Endpoint** 和 ** VPC Peering** 连接类型。更多信息请参见 [Connect to Your TiDB Cloud Dedicated Cluster ](https://docs.pingcap.com/tidbcloud/connect-to-tidb-cluster)。
121+ 除了 ** Public** 连接类型外 ,TiDB Cloud Dedicated 还支持 ** Private Endpoint** 和 ** VPC Peering** 连接类型。更多信息参见 [连接到你的 TiDB Cloud Dedicated 集群 ](https://docs.pingcap.com/tidbcloud/connect-to-tidb-cluster)。
122122
1231234. 运行以下命令,复制 ` env.sh.example` 并重命名为 ` env.sh` :
124124
@@ -137,7 +137,7 @@ cd tidb-java-hibernate-quickstart
137137 export USE_SSL='false'
138138 ` ` `
139139
140- 请务必将 ` {}` 占位符替换为连接对话框中获取的连接参数 。
140+ 请务必将 ` {}` 占位符替换为连接对话框中获得的连接参数 。
141141
1421426. 保存 ` env.sh` 文件。
143143
@@ -168,21 +168,21 @@ cd tidb-java-hibernate-quickstart
168168< /div>
169169< /SimpleTab>
170170
171- # ## 第 3 步 :运行代码并检查结果
171+ # ## 步骤 3 :运行代码并检查结果
172172
1731731. 执行以下命令运行示例代码:
174174
175175 ` ` ` shell
176176 make
177177 ` ` `
178178
179- 2. 检查 [Expected-Output.txt](https://github.com/tidb-samples/tidb-java-hibernate-quickstart/blob/main/Expected-Output.txt) 以确认输出是否一致 。
179+ 2. 检查 [Expected-Output.txt](https://github.com/tidb-samples/tidb-java-hibernate-quickstart/blob/main/Expected-Output.txt) 文件,确认输出是否一致 。
180180
181181# # 示例代码片段
182182
183183你可以参考以下示例代码片段,完成你自己的应用开发。
184184
185- 完整示例代码及运行方法请参考 [tidb-samples/tidb-java-hibernate-quickstart](https://github.com/tidb-samples/tidb-java-hibernate-quickstart) 仓库。
185+ 完整示例代码及运行方法请参见 [tidb-samples/tidb-java-hibernate-quickstart](https://github.com/tidb-samples/tidb-java-hibernate-quickstart) 仓库。
186186
187187# ## 连接 TiDB
188188
@@ -198,7 +198,7 @@ cd tidb-java-hibernate-quickstart
198198
199199 < ! -- Database connection settings -->
200200 < property name=" hibernate.connection.driver_class" > com.mysql.cj.jdbc.Driver< /property>
201- < property name=" hibernate.dialect" > org.hibernate.dialect.TiDBDialect < /property>
201+ < property name=" hibernate.dialect" > org.hibernate.dialect.MySQLDialect < /property>
202202 < property name=" hibernate.connection.url" > ${tidb_jdbc_url} < /property>
203203 < property name=" hibernate.connection.username" > ${tidb_user} < /property>
204204 < property name=" hibernate.connection.password" > ${tidb_password} < /property>
@@ -225,7 +225,7 @@ public SessionFactory getSessionFactory() {
225225}
226226` ` `
227227
228- 使用该函数时,需要将 ` ${your_entity_class} ` 替换为你自己的数据实体类。如果有多个实体类,需要为每个实体类添加一条 ` .addAnnotatedClass(${your_entity_class} )` 语句。上述函数只是配置 Hibernate 的一种方式。如果你在配置过程中遇到问题,或想了解更多 Hibernate 相关内容,请参考 [Hibernate 官方文档](https://hibernate.org/orm/documentation)。
228+ 使用该函数时,你需要将 ` ${your_entity_class} ` 替换为你自己的数据实体类。若有多个实体类,需要为每个类添加一条 ` .addAnnotatedClass(${your_entity_class} )` 语句。上述函数只是配置 Hibernate 的一种方式。如果你在配置过程中遇到问题,或想了解更多 Hibernate 相关内容,请参考 [Hibernate 官方文档](https://hibernate.org/orm/documentation)。
229229
230230# ## 插入或更新数据
231231
@@ -235,7 +235,7 @@ try (Session session = sessionFactory.openSession()) {
235235}
236236` ` `
237237
238- 更多信息请参考 [插入数据](/develop/dev-guide-insert-data.md) 和 [更新数据 ](/develop/dev-guide-update-data.md)。
238+ 更多信息参见 [插入数据](/develop/dev-guide-insert-data.md) 和 [修改数据 ](/develop/dev-guide-update-data.md)。
239239
240240# ## 查询数据
241241
@@ -246,7 +246,7 @@ try (Session session = sessionFactory.openSession()) {
246246}
247247` ` `
248248
249- 更多信息请参考 [查询数据](/develop/dev-guide-get-data-from-single-table.md)。
249+ 更多信息参见 [查询数据](/develop/dev-guide-get-data-from-single-table.md)。
250250
251251# ## 删除数据
252252
@@ -256,25 +256,61 @@ try (Session session = sessionFactory.openSession()) {
256256}
257257` ` `
258258
259- 更多信息请参考 [删除数据](/develop/dev-guide-delete-data.md)。
259+ 更多信息参见 [删除数据](/develop/dev-guide-delete-data.md)。
260+
261+ # # 与 `MySQLDialect` 的兼容性
262+
263+ 当你在 TiDB 中使用 ` MySQLDialect` 时,请注意以下行为:
264+
265+ # ## `SERIALIZABLE` 隔离级别
266+
267+ 应用程序如果尝试设置 ` SERIALIZABLE` 事务隔离级别,在 TiDB 中会遇到如下错误:
268+
269+ ` ` `
270+ The isolation level ' SERIALIZABLE' is not supported. Set tidb_skip_isolation_level_check=1 to skip this error
271+ ` ` `
272+
273+ 为避免该错误,请在服务器端设置如下 TiDB 系统变量:
274+
275+ ` ` ` sql
276+ SET GLOBAL tidb_skip_isolation_level_check=1;
277+ ` ` `
278+
279+ 启用该变量后,TiDB 会接受指定 ` SERIALIZABLE` 的请求而不返回错误。内部实际仍采用 ` REPEATABLE-READ` ,这是 TiDB 的最强隔离级别。更多信息参见 [` tidb_skip_isolation_level_check` ](/system-variables.md#tidb_skip_isolation_level_check)。
280+
281+ > ** 注意:**
282+ >
283+ > 社区维护的 ` TiDBDialect` 会自动处理该行为,跳过需要 ` SERIALIZABLE` 隔离级别的特性。
284+
285+ # ## `CHECK` 约束
286+
287+ Hibernate 的 [` @Check` ](https://docs.hibernate.org/orm/6.5/javadocs/org/hibernate/annotations/Check.html) 注解会生成 DDL ` CHECK` 约束。[MySQL 8.0.16 及以上版本](https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html) 默认会强制执行这些约束,但 TiDB 默认不会强制执行,除非你显式开启。
288+
289+ 如需在 TiDB 中启用 ` CHECK` 约束强制执行,请设置如下系统变量:
290+
291+ ` ` ` sql
292+ SET GLOBAL tidb_enable_check_constraint=ON;
293+ ` ` `
294+
295+ 如果未设置该变量,TiDB 会接受 ` CHECK` 约束语法但不会强制执行,可能导致数据完整性问题。更多信息参见 [` CHECK` 约束](/constraints.md#check)。
260296
261297# # 后续步骤
262298
263- - 通过 [Hibernate 文档](https://hibernate.org/orm/documentation) 学习更多 Hibernate 的用法 。
264- - 通过 [开发者指南](/develop/dev-guide-overview.md) 各章节学习 TiDB 应用开发最佳实践,例如 [插入数据](/develop/dev-guide-insert-data.md)、[更新数据 ](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md) 和 [SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)。
299+ - 通过 [Hibernate 文档](https://hibernate.org/orm/documentation) 学习更多 Hibernate 用法 。
300+ - 通过 [开发者指南](/develop/dev-guide-overview.md) 各章节,学习 TiDB 应用开发最佳实践,例如 [插入数据](/develop/dev-guide-insert-data.md)、[修改数据 ](/develop/dev-guide-update-data.md)、[删除数据](/develop/dev-guide-delete-data.md)、[单表读取](/develop/dev-guide-get-data-from-single-table.md)、[事务](/develop/dev-guide-transaction-overview.md) 以及 [SQL 性能优化](/develop/dev-guide-optimize-sql-overview.md)。
265301- 通过专业的 [TiDB 开发者课程](https://www.pingcap.com/education/) 学习,并在通过考试后获得 [TiDB 认证](https://www.pingcap.com/education/certification/)。
266302- 通过 Java 开发者课程学习:[Working with TiDB from Java](https://eng.edu.pingcap.com/catalog/info/id:212)。
267303
268304# # 需要帮助?
269305
270306< CustomContent platform=" tidb" >
271307
272- 在 [Discord](https://discord.gg/DQZ2dy3cuc? utm_source=doc) 或 [Slack](https://slack.tidb.io/invite? team=tidb-community& channel=everyone& ref=pingcap-docs) 社区提问,或[提交支持工单](/support.md)。
308+ 在 [Discord](https://discord.gg/DQZ2dy3cuc? utm_source=doc) 或 [Slack](https://slack.tidb.io/invite? team=tidb-community& channel=everyone& ref=pingcap-docs) 社区提问,或 [提交支持工单](/support.md)。
273309
274310< /CustomContent>
275311
276312< CustomContent platform=" tidb-cloud" >
277313
278- 在 [Discord](https://discord.gg/DQZ2dy3cuc? utm_source=doc) 或 [Slack](https://slack.tidb.io/invite? team=tidb-community& channel=everyone& ref=pingcap-docs) 社区提问,或[提交支持工单](https://tidb.support.pingcap.com/)。
314+ 在 [Discord](https://discord.gg/DQZ2dy3cuc? utm_source=doc) 或 [Slack](https://slack.tidb.io/invite? team=tidb-community& channel=everyone& ref=pingcap-docs) 社区提问,或 [提交支持工单](https://tidb.support.pingcap.com/)。
279315
280- < /CustomContent>
316+ < /CustomContent>
0 commit comments