From 9039b3a65492087c79cd0cd2f8d9619146234046 Mon Sep 17 00:00:00 2001 From: lidongy <1879087903@qq.com> Date: Fri, 18 Sep 2020 09:22:12 +0800 Subject: [PATCH] =?UTF-8?q?KERNEL-5345=20refactor:=20=E5=AF=B9mysql5?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E7=89=B9=E6=AE=8A=E5=A4=84=E7=90=86?= =?UTF-8?q?=20=E6=94=B9=E5=9C=A8third?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/hibernate/dialect/MySQL5Dialect.java | 19 ++++++++++++++++++- .../org/hibernate/dialect/MySQL8Dialect.java | 17 +++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 fine-hibernate/src/main/java/com/fr/third/org/hibernate/dialect/MySQL8Dialect.java diff --git a/fine-hibernate/src/main/java/com/fr/third/org/hibernate/dialect/MySQL5Dialect.java b/fine-hibernate/src/main/java/com/fr/third/org/hibernate/dialect/MySQL5Dialect.java index beeec4c7b..0b8ee5e86 100644 --- a/fine-hibernate/src/main/java/com/fr/third/org/hibernate/dialect/MySQL5Dialect.java +++ b/fine-hibernate/src/main/java/com/fr/third/org/hibernate/dialect/MySQL5Dialect.java @@ -9,9 +9,11 @@ package com.fr.third.org.hibernate.dialect; import com.fr.third.org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtracter; import com.fr.third.org.hibernate.exception.spi.ViolatedConstraintNameExtracter; import com.fr.third.org.hibernate.internal.util.JdbcExceptionHelper; +import com.fr.third.org.hibernate.mapping.Column; import java.sql.SQLException; import java.sql.Types; +import java.util.List; /** * An SQL dialect for MySQL 5.x specific features. @@ -19,6 +21,9 @@ import java.sql.Types; * @author Steve Ebersole */ public class MySQL5Dialect extends MySQLDialect { + + private static final int INDEX_LENGTH_LIMIT = 255; + @Override protected void registerVarcharTypes() { registerColumnType( Types.VARCHAR, "longtext" ); @@ -31,7 +36,19 @@ public class MySQL5Dialect extends MySQLDialect { public boolean supportsColumnCheck() { return false; } - + + //utf8编码下,mysql5.7以下版本主键长度不能超过255,故特殊处理,去掉它的primary。 + // 它默认会生成一个长度为255的前缀索引 + @Override + public String getPrimaryKeyString(List columnList) { + for (Column column : columnList) { + if (column.getLength() > INDEX_LENGTH_LIMIT) { + return "key"; + } + } + return "primary key"; + } + public ViolatedConstraintNameExtracter getViolatedConstraintNameExtracter() { return EXTRACTER; } diff --git a/fine-hibernate/src/main/java/com/fr/third/org/hibernate/dialect/MySQL8Dialect.java b/fine-hibernate/src/main/java/com/fr/third/org/hibernate/dialect/MySQL8Dialect.java new file mode 100644 index 000000000..4e10003c2 --- /dev/null +++ b/fine-hibernate/src/main/java/com/fr/third/org/hibernate/dialect/MySQL8Dialect.java @@ -0,0 +1,17 @@ +package com.fr.third.org.hibernate.dialect; + +import com.fr.third.org.hibernate.mapping.Column; + +import java.util.List; + +/** + * @author lidongy + * @version 10.0 + * Created by lidongy on 2020/9/18 + */ +public class MySQL8Dialect extends MySQL5Dialect { + @Override + public String getPrimaryKeyString(List columnList) { + return "primary key"; + } +}