引入依赖:

org.hibernate

hibernate-core

org.xerial

sqlite-jdbc

3.7.2

配置文件hibernate.cfg.xml:

"-//Hibernate/Hibernate Configuration DTD//EN"

"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

true

true

jdbc:sqlite://H:/wf1.db

org.sqlite.JDBC

com.whalefull.appwsd.utils.SQLiteDialect

update

hibernate.hbm2ddl.auto支持以下配置:Supported values include 'create', 'create-drop', 'create-only', 'drop', 'update', 'none' and 'validate'

SQLite方言类:

package com.whalefull.appwsd.utils;

import java.sql.Types;

import org.hibernate.Hibernate;

import org.hibernate.dialect.Dialect;

import org.hibernate.dialect.function.SQLFunctionTemplate;

import org.hibernate.dialect.function.StandardSQLFunction;

import org.hibernate.dialect.function.VarArgsSQLFunction;

import org.hibernate.type.IntegerType;

import org.hibernate.type.StringType;

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.BLOB, "blob");

registerColumnType(Types.CLOB, "clob");

registerColumnType(Types.BOOLEAN, "integer");

registerFunction("concat", new VarArgsSQLFunction(StringType.INSTANCE, "", "||", ""));

registerFunction("mod", new SQLFunctionTemplate(IntegerType.INSTANCE, "?1 % ?2"));

registerFunction("substr", new StandardSQLFunction("substr", StringType.INSTANCE));

registerFunction("substring", new StandardSQLFunction("substr", StringType.INSTANCE));

}

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;

}

}

以下是测试:

实体类及配置,这里用的是lombok:

package com.whalefull.appwsd.entity;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

//部门表

@Data

//有参

@AllArgsConstructor

//无参

@NoArgsConstructor

public class BuMen {

private Integer id;

private String buMenMingCheng;

}

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

测试用例:

public static void main(String[] args) {

BuMen b = new BuMen();

b.setBuMenMingCheng( "财务" );

SessUtils.save( b );

}

工具:

package com.whalefull.appwsd.utils;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

public class SessUtils {

/**

* 调用Session类,执行以下过程:save → commit → close.

* @param o 实体类对象

*/

public static void save(Object o){

SessionFactory sf = new Configuration().configure().buildSessionFactory();

Session sess = sf.openSession();

Transaction transaction = sess.beginTransaction();

sess.save(o);

transaction.commit();

sess.close();

sf.close();

}

/**

* 调用Session类,执行以下过程:update → commit → close.

* @param o 实体类对象

*/

public static void update(Object o) {

SessionFactory sf = new Configuration().configure().buildSessionFactory();

Session sess = sf.openSession();

Transaction transaction = sess.beginTransaction();

sess.update(o);

transaction.commit();

sess.close();

sf.close();

}

}

测试结果:

经过反复测试,id是可以自增的

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: