Hibernate中SQLite方言


package com.lain.util;

/**

 * 2013-7-25

 * chongzhen_zhao

 * SQLite方言

 */

import java.sql.Types;





import org.hibernate.dialect.Dialect;

import org.hibernate.dialect.function.StandardSQLFunction;

import org.hibernate.dialect.function.SQLFunctionTemplate;

import org.hibernate.dialect.function.VarArgsSQLFunction;

import org.hibernate.type.StandardBasicTypes;

import org.hibernate.Hibernate;





public class SQLiteDialect extends Dialect {

	public SQLiteDialect() {

		super();

		registerColumnType(Types.BIT, "integer");

		registerColumnType(Types.TINYINT, "tinyint");

		registerColumnType(Types.SMALLINT, "smallint");

		registerColumnType(Types.INTEGER, "integer");

		registerColumnType(Types.BIGINT, "bigint");

		registerColumnType(Types.FLOAT, "float");

		registerColumnType(Types.REAL, "real");

		registerColumnType(Types.DOUBLE, "double");

		registerColumnType(Types.NUMERIC, "numeric");

		registerColumnType(Types.DECIMAL, "decimal");

		registerColumnType(Types.CHAR, "char");

		registerColumnType(Types.VARCHAR, "varchar");

		registerColumnType(Types.LONGVARCHAR, "longvarchar");

		registerColumnType(Types.DATE, "date");

		registerColumnType(Types.TIME, "time");

		registerColumnType(Types.TIMESTAMP, "timestamp");

		registerColumnType(Types.BINARY, "blob");

		registerColumnType(Types.VARBINARY, "blob");

		registerColumnType(Types.LONGVARBINARY, "blob");

		// registerColumnType(Types.NULL, "null");

		registerColumnType(Types.BLOB, "blob");

		registerColumnType(Types.CLOB, "clob");

		registerColumnType(Types.BOOLEAN, "integer");





		registerFunction("concat", new VarArgsSQLFunction(StandardBasicTypes.STRING, "",

				"||", ""));

		registerFunction("mod", new SQLFunctionTemplate(StandardBasicTypes.INTEGER,

				"?1 % ?2"));

		registerFunction("substr", new StandardSQLFunction("substr",

				StandardBasicTypes.STRING));

		registerFunction("substring", new StandardSQLFunction("substr",

				StandardBasicTypes.STRING));

	}





	public boolean supportsIdentityColumns() {

		return true;

	}





	/*

	 public boolean supportsInsertSelectIdentity() {

	 return true; // As specify in NHibernate dialect

	 }

	 */





	public boolean hasDataTypeInIdentityColumn() {

		return false; // As specify in NHibernate dialect

	}





	/*

	 public String appendIdentitySelectToInsert(String insertString) {

	 return new StringBuffer(insertString.length()+30). // As specify in NHibernate dialect

	 append(insertString).

	 append("; ").append(getIdentitySelectString()).

	 toString();

	 }

	 */





	public String getIdentityColumnString() {

		// return "integer primary key autoincrement";

		return "integer";

	}





	public String getIdentitySelectString() {

		return "select last_insert_rowid()";

	}





	public boolean supportsLimit() {

		return true;

	}





	public String getLimitString(String query, boolean hasOffset) {

		return new StringBuffer(query.length() + 20).append(query).append(

				hasOffset ? " limit ? offset ?" : " limit ?").toString();

	}





	public boolean supportsTemporaryTables() {

		return true;

	}





	public String getCreateTemporaryTableString() {

		return "create temporary table if not exists";

	}





	public boolean dropTemporaryTableAfterUse() {

		return false;

	}





	public boolean supportsCurrentTimestampSelection() {

		return true;

	}





	public boolean isCurrentTimestampSelectStringCallable() {

		return false;

	}





	public String getCurrentTimestampSelectString() {

		return "select current_timestamp";

	}





	public boolean supportsUnionAll() {

		return true;

	}





	public boolean hasAlterTable() {

		return false; // As specify in NHibernate dialect

	}





	public boolean dropConstraints() {

		return false;

	}





	public String getAddColumnString() {

		return "add column";

	}





	public String getForUpdateString() {

		return "";

	}





	public boolean supportsOuterJoinForUpdate() {

		return false;

	}





	public String getDropForeignKeyString() {

		throw new UnsupportedOperationException(

				"No drop foreign key syntax supported by SQLiteDialect");

	}





	public String getAddForeignKeyConstraintString(String constraintName,

			String[] foreignKey, String referencedTable, String[] primaryKey,

			boolean referencesPrimaryKey) {

		throw new UnsupportedOperationException(

				"No add foreign key syntax supported by SQLiteDialect");

	}





	public String getAddPrimaryKeyConstraintString(String constraintName) {

		throw new UnsupportedOperationException(

				"No add primary key syntax supported by SQLiteDialect");

	}





	public boolean supportsIfExistsBeforeTableName() {

		return true;

	}





	public boolean supportsCascadeDelete() {

		return false;

	}

	/**

	 * 修复分页bug

	 * @author Z.kc

	 */

	@Override

	public boolean bindLimitParametersInReverseOrder() {

		return true;

	}

}


注意上面代码中的粗体,原因是:

 

 

在HIbernate4.0版本中

使用Hibernate.STRING 会报错

原因是

 NullableType在新版本中已过时 

修改为
 StandardBasicTypes.STRING 


static StringType STRING 
          Deprecated. Use StandardBasicTypes.STRING instead. 
import org.hibernate.type.StandardBasicTypes;!!!!


你可能感兴趣的:(Hibernate)