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]