Browse Source

Pull request #871: KERNEL-5345 refactor: hibernate特殊处理,使其可以扩展建表时的主键设置语句

Merge in CORE/base-third from ~LIDONGY/base-third:release/10.0 to release/10.0

* commit '9039b3a65492087c79cd0cd2f8d9619146234046':
  KERNEL-5345 refactor: 对mysql5数据库特殊处理 改在third
  KERNEL-5345 refactor: hibernate特殊处理,使其可以扩展建表时的主键设置语句
release/10.0
lidongy 4 years ago
parent
commit
98ae82a817
  1. 12
      fine-hibernate/src/main/java/com/fr/third/org/hibernate/dialect/Dialect.java
  2. 19
      fine-hibernate/src/main/java/com/fr/third/org/hibernate/dialect/MySQL5Dialect.java
  3. 17
      fine-hibernate/src/main/java/com/fr/third/org/hibernate/dialect/MySQL8Dialect.java
  4. 4
      fine-hibernate/src/main/java/com/fr/third/org/hibernate/mapping/PrimaryKey.java

12
fine-hibernate/src/main/java/com/fr/third/org/hibernate/dialect/Dialect.java

@ -1601,11 +1601,11 @@ public abstract class Dialect implements ConversionContext {
* Build an instance of a {@link SQLExceptionConversionDelegate} for
* interpreting dialect-specific error or SQLState codes.
* <p/>
* When {@link #buildSQLExceptionConverter} returns null, the default
* When {@link #buildSQLExceptionConverter} returns null, the default
* {@link SQLExceptionConverter} is used to interpret SQLState and
* error codes. If this method is overridden to return a non-null value,
* the default {@link SQLExceptionConverter} will use the returned
* {@link SQLExceptionConversionDelegate} in addition to the following
* {@link SQLExceptionConversionDelegate} in addition to the following
* standard delegates:
* <ol>
* <li>a "static" delegate based on the JDBC 4 defined SQLException hierarchy;</li>
@ -2783,4 +2783,12 @@ public abstract class Dialect implements ConversionContext {
public boolean supportsNationalizedTypes() {
return true;
}
/**
* 获取主键sql字符串
*
* @param columnList 主键列集合
* @return int
*/
public String getPrimaryKeyString(List<Column> columnList) { return "primary key";}
}

19
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<Column> columnList) {
for (Column column : columnList) {
if (column.getLength() > INDEX_LENGTH_LIMIT) {
return "key";
}
}
return "primary key";
}
public ViolatedConstraintNameExtracter getViolatedConstraintNameExtracter() {
return EXTRACTER;
}

17
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<Column> columnList) {
return "primary key";
}
}

4
fine-hibernate/src/main/java/com/fr/third/org/hibernate/mapping/PrimaryKey.java

@ -6,6 +6,7 @@
*/
package com.fr.third.org.hibernate.mapping;
import java.util.Iterator;
import java.util.List;
import com.fr.third.org.hibernate.dialect.Dialect;
import com.fr.third.org.hibernate.internal.util.StringHelper;
@ -58,7 +59,8 @@ public class PrimaryKey extends Constraint {
}
public String sqlConstraintString(Dialect dialect) {
StringBuilder buf = new StringBuilder("primary key (");
List<Column> columnList = getColumns();
StringBuilder buf = new StringBuilder(dialect.getPrimaryKeyString(columnList)).append(" (");
Iterator iter = getColumnIterator();
while ( iter.hasNext() ) {
buf.append( ( (Column) iter.next() ).getQuotedName(dialect) );

Loading…
Cancel
Save