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中SQLite方言的更多相关文章

  1. hibernate中数据库方言

    在配置hibernate.cfg.xml时需指定使用数据库的方言: 例: <property name="dialect">org.hibernate.dialect. ...

  2. 详解在Hibernate中配置数据库方言的作用和好处以及各种数据库的方言连接

    Hibernate底层依然使用SQL语句来执行数据库操作,虽然所有关系型数据库都支持使用标准SQL语句,但所有数据库都对标准SQL进行了一些扩展,所以在语法细节上存在一些差异,因此Hibernate需 ...

  3. Hibernate中的PO

    Hibernate中的PO PO就是持久化对象,它的作用就是完成持久化操作,即通过以面向对象的方式操作该对象对数据库中的数据执行增.删.改.查的操作. Hibernate是低侵入式的设计,完全采用Ja ...

  4. hibernate 中id生成策略

    数据库的设计和操作中,我们通常会给表建立主键. 主键,可以分为自然主键和代理主键. 自然主键表示:采用具有业务逻辑含义的字段作为表的主键.比如在用户信息表中,采用用户的身份证号码作为主键.但是这样一来 ...

  5. Hibernate中的主键生成器generator

    本文讲述Hibernate的generator属性的意义.Generator属性有7种class,本文简略描述了这7种class的意义和用法. [xhtml] view plaincopy <c ...

  6. 使用SQLQuery 在Hibernate中使用sql语句

    对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 1.标量查询(Scalar q ...

  7. Hibernate中Session与本地线程绑定

    ------------------siwuxie095 Hibernate 中 Session 与本地线程绑定 1.Session 类似于 JDBC 的连接 Connection 2.Session ...

  8. Hibernate中双向多对多的两种配置方式

    Hibernate中双向多对多的两种配置方式 1.建立多对多双向关联关系 package cn.happy.entitys; import java.util.HashSet; import java ...

  9. 分享知识-快乐自己:Hibernate 中的 HQL 语句的实际应用

    概要: Hibernate 支持三种查询方式: HQL查询.Criteria查询及原声 SQL (Native SQL)查询. HQL(Hibernate Query Language,Hiberna ...

随机推荐

  1. java惯用法转载

    目录 实现: equals() hashCode() compareTo() clone() 应用: StringBuilder/StringBuffer Random.nextInt(int) It ...

  2. Java这点事

    1--代码片段:  1 2 3 4 5 byte b1=1,b2=2,b3,b6;  final byte b4=4,b5=6;  b6=b4+b5;  b3=(b1+b2);  System.out ...

  3. (五)学习JavaScript之firstChild 属性

    参考:http://www.w3school.com.cn/jsref/prop_node_firstchild.asp 定义和用法 firstChild 属性返回指定节点的首个子节点,以 Node ...

  4. delphi获得当前鼠标坐标

    简单的说就是取鼠标所在位置对应的窗口句柄? procedure TForm1.Timer1Timer(Sender: TObject);vara:TPoint; //用来存放坐标hw:HWND; // ...

  5. 房租管理小软件(四):对linq的使用

    1.对LInq的封装如下: private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMap ...

  6. flash player 版本对照

  7. Hapoop原理及MapReduce原理分析

    Hapoop原理 Hadoop是一个开源的可运行于大规模集群上的分布式并行编程框架,其最核心的设计包括:MapReduce和HDFS.基于 Hadoop,你可以轻松地编写可处理海量数据的分布式并行程序 ...

  8. CVTE面试经历

    CVTE也算一般的公司,很偏,不想说.我重点说一下面试的过程,我面试的C++程序开发工程师. 1.自我介绍自己的基本情况. 2.首先问你了解C++的面向对象么,他有哪些主要内容.对面向对象中的多态性你 ...

  9. Ubuntu 设置简单密码,复杂度太高

    Ubuntu 中创建的用户密码复杂度很高,如果想设置1234 ,或者与账户名相同的密码时,SystemSetting 中是不可以设置的. 可以通过简单的命令来设置 其中 anyongfei 是账户名 ...

  10. uva11732 strcmp() Anyone?

    题意:给出多个字符串,两两配对,求总配对次数. 思路:如果两个字符串一样,ans=strlen(字符串)*2+2,如果不同,ans=公共前缀长度*2+1:用左儿子右兄弟建字典树.插入一个字符计算一次. ...