Problema ao usar o hibernate com sqlite

Olá amigos do GUJ, já faz um tempo que tento usar o hibernate com o sqlite, mas sem muito sucesso. A aplicação roda sem problemas com o mysql, só que estou querendo testá-la com o sqlite. Pesquisando na internet vi que precisava de uma classe do dialect que não tem no hibernate, baixei uma mas está com um erro. pesquisei novamente e encontrei outra. baixei esta classe e coloquei no projeto. após isso rodou mas rodando com o comando create, se coloco o comando update dá a seguinte excessao:

Além da excessao segue as duas classes do dialect e também algumas outras do projeto. se alguém puder ajudar desde já agradeço.

0 [AWT-EventQueue-0] INFO org.hibernate.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.0.CR2} 24 [AWT-EventQueue-0] INFO org.hibernate.Version - HHH000412: Hibernate Core {4.0.0.CR4} 27 [AWT-EventQueue-0] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found 29 [AWT-EventQueue-0] INFO org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist 866 [AWT-EventQueue-0] INFO org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000402: Using Hibernate built-in connection pool (not for production use!) 876 [AWT-EventQueue-0] INFO org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000115: Hibernate connection pool size: 20 877 [AWT-EventQueue-0] INFO org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000006: Autocommit mode: true 877 [AWT-EventQueue-0] INFO org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000401: using driver [org.sqlite.JDBC] at URL [jdbc:sqlite:BANCO_DE_CONTAS.db] 878 [AWT-EventQueue-0] INFO org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000046: Connection properties: {user=, password=****, autocommit=true, release_mode=auto} 1043 [AWT-EventQueue-0] INFO org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.SQLiteDialect 1060 [AWT-EventQueue-0] INFO org.hibernate.engine.jdbc.internal.LobCreatorBuilder - HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [2] less than 4 1076 [AWT-EventQueue-0] INFO org.hibernate.engine.transaction.internal.TransactionFactoryInitiator - HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 1085 [AWT-EventQueue-0] INFO org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory - HHH000397: Using ASTQueryTranslatorFactory 1458 [AWT-EventQueue-0] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - HHH000228: Running hbm2ddl schema update 1458 [AWT-EventQueue-0] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - HHH000102: Fetching database metadata 1460 [AWT-EventQueue-0] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - HHH000396: Updating schema 1467 [AWT-EventQueue-0] WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: null 1467 [AWT-EventQueue-0] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - not yet implemented 1469 [AWT-EventQueue-0] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - HHH000299: Could not complete schema update org.hibernate.exception.GenericJDBCException: could not get table metadata: TAB_CONTASPAGAR at org.hibernate.exception.internal.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:148) at org.hibernate.exception.internal.SQLStateConverter.convert(SQLStateConverter.java:136) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:124) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109) at org.hibernate.tool.hbm2ddl.DatabaseMetadata.getTableMetadata(DatabaseMetadata.java:128) at org.hibernate.cfg.Configuration.generateSchemaUpdateScript(Configuration.java:1126) at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:212) at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:178) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:443) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1723) at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:76) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:907) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:887) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) at org.wellington.contaspagar.conexao.ConexaoDB.<init>(ConexaoDB.java:12) at org.wellington.contaspagar.repositorio.ContasPagarRepositorio.<init>(ContasPagarRepositorio.java:24) at org.wellington.contaspagar.controller.ContasPagarControle.<init>(ContasPagarControle.java:18) at org.wellington.contaspagar.gui.ContasPagarUI.<init>(ContasPagarUI.java:53) at org.wellington.contaspagar.gui.ContasPagarUI$12.run(ContasPagarUI.java:403) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) Caused by: java.sql.SQLException: not yet implemented at org.sqlite.MetaData.getImportedKeys(MetaData.java:503) at org.hibernate.tool.hbm2ddl.TableMetadata.initForeignKeys(TableMetadata.java:161) at org.hibernate.tool.hbm2ddl.TableMetadata.<init>(TableMetadata.java:59) at org.hibernate.tool.hbm2ddl.DatabaseMetadata.getTableMetadata(DatabaseMetadata.java:113) ... 30 more

O arquivo persitence

<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="BANCO_DE_CONTAS" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>org.wellington.contaspagar.modelo.Contaspagar</class> <properties> <property name="hibernate.connection.username" value=""/> <property name="hibernate.connection.driver_class" value="org.sqlite.JDBC"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:sqlite:BANCO_DE_CONTAS.db"/> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.dialect" value="org.hibernate.dialect.SQLiteDialect"/> <property name="hibernate.show_sql" value="true"/> </properties> </persistence-unit> </persistence>

Essa é a que baixei na segunda vez e é a que estou usando

[code]package org.hibernate.dialect;

import org.hibernate.dialect.Dialect;

public class SQLiteDialect extends Dialect{

public SQLiteDialect()
{
registerColumnType(java.sql.Types.BINARY, “BLOB”);
registerColumnType(java.sql.Types.TINYINT, “INTEGER(1)”);
registerColumnType(java.sql.Types.SMALLINT, “INTEGER(2)”);
registerColumnType(java.sql.Types.INTEGER, “INTEGER(4)”);
registerColumnType(java.sql.Types.BIGINT, “INTEGER(8)”);
registerColumnType(java.sql.Types.BIT, “INTEGER(1)”);
registerColumnType(java.sql.Types.BOOLEAN, “INTEGER(1)”);
registerColumnType(java.sql.Types.DECIMAL, “REAL”);
registerColumnType(java.sql.Types.DOUBLE, “REAL”);
registerColumnType(java.sql.Types.FLOAT, “REAL”);
registerColumnType(java.sql.Types.CHAR, “TEXT(1)”);
registerColumnType(java.sql.Types.VARCHAR, “TEXT($l)”);
registerColumnType(java.sql.Types.CLOB, “TEXT”);
registerColumnType(java.sql.Types.BLOB, “BLOB”);
registerColumnType(java.sql.Types.DATE, “DATETIME”);
registerColumnType(java.sql.Types.TIME, “DATETIME”);
registerColumnType(java.sql.Types.NULL, “NULL”);
}

@Override
public String getIdentitySelectString()
{
return “SELECT last_insert_rowid()”;
}

@Override
public String appendIdentitySelectToInsert(String insertSql)
{
return insertSql + "; " + getIdentitySelectString();
}

@Override
public boolean hasAlterTable()
{
return false;
}

@Override
public boolean dropConstraints()
{
return false;
}

@Override
public String getForUpdateString()
{
return “”;
}

@Override
public boolean supportsSubselectAsInPredicateLHS()
{
// TODO: try it, at nhibernate’s original code says:
// SQLite actually does support subselects, but gives syntax errors
// in tests. Need to investigate this.
return false;
}
}

[/code]

Esta é a que baixei na primeira vez e é a que está dando erro

[code]/*

  • The author disclaims copyright to this source code. In place of
  • a legal notice, here is a blessing:
  • May you do good and not evil.
  • May you find forgiveness for yourself and forgive others.
  • May you share freely, never taking more than you give.

*/
package org.hibernate.dialect;

import java.sql.Types;

import org.hibernate.dialect.function.StandardSQLFunction;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.dialect.function.VarArgsSQLFunction;
import org.hibernate.Hibernate;

public class SQLiteDialect extends Dialect {
public SQLiteDialect() {
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”);

//O erro é nessas 4 linhas abaixo. mais especificamente apois o Hibernate.
//( Hibernate.STRING, “”, “||”, “”) , Hibernate.INTEGER, “?1 % ?2” ), (“substr”, Hibernate.STRING), ( “substr”, Hibernate.STRING )
registerFunction( “concat”, new VarArgsSQLFunction(Hibernate.STRING, “”, “||”, “”) );
registerFunction( “mod”, new SQLFunctionTemplate( Hibernate.INTEGER, “?1 % ?2” ) );
registerFunction( “substr”, new StandardSQLFunction(“substr”, Hibernate.STRING) );
registerFunction( “substring”, new StandardSQLFunction( “substr”, Hibernate.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;
}

protected 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;
}
}[/code]

Se não me engano Hibernate e sqlite não se dão bem mesmo


http://www.wedebug.it/2011/09/28/hibernatejpa-com-sqlite/
http://code.google.com/p/hibernate-sqlite/

A primeira classe a qual está com erro eu peguei aqui:
http://www.wedebug.it/2011/09/28/hibernatejpa-com-sqlite/