2013-03-13 24 views
5

ここに私の問題があります:Hibernate + SQLiteデータベースが作成されていません

私はJavaFX + Hibernate + SQLiteを使用するデスクトップアプリケーションを持っています。 これは私のモデルである:これは私のpersistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.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_2_0.xsd"> 
    <persistence-unit name="PartyRockPU" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>br.com.gear7.partyrock.model.Usuario</class> 

    <properties> 
     <property name="javax.persistence.jdbc.driver" value="org.sqlite.JDBC" /> 
     <property name="javax.persistence.jdbc.url" value="jdbc:sqlite:party_rock.sqlite" /> 
     <property name="javax.persistence.jdbc.user" value="" /> 
     <property name="javax.persistence.jdbc.password" value="" /> 

     <property name="hibernate.dialect" value="br.com.gear7.partyrock.utils.SQLiteDialect"/> 
     <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/> 
     <property name="hibernate.connection.charSet" value="UTF-8"/> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

ある

@Entity 
@Table(name = "usuario") 
public class Usuario implements AbstractModel, Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

    @NotNull @Size(min=5, max=100) 
    private String username; 

    @NotNull @Size(min=5, max=100) 
    private String password; 

    @NotNull 
    private Boolean administrador; 

    @Version 
    private Integer version; 

    public Usuario() { 
    } 

    public Usuario(Integer id, String username, String password, Boolean admin, Integer version) { 
     this.id = id; 
     this.username = username; 
     this.password = password; 
     this.administrador = admin; 
     this.version = version; 
    } 

    @Override 
    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPasword(String password) { 
     this.password = password; 
    } 

    public Boolean getAdministrador() { 
     return administrador; 
    } 

    public void setAdministrador(Boolean administrador) { 
     this.administrador = administrador; 
    } 

    public Integer getVersion() { 
     return version; 
    } 

そして最後に、これは私のSQLiteDialect

> package br.com.gear7.partyrock.utils; 
/* 
* 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. 
* 
*/ 
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.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(org.hibernate.type.StandardBasicTypes.STRING, "", 
       "||", "")); 
     registerFunction("mod", new SQLFunctionTemplate(org.hibernate.type.StandardBasicTypes.INTEGER, 
       "?1 % ?2")); 
     registerFunction("substr", new StandardSQLFunction("substr", 
       org.hibernate.type.StandardBasicTypes.STRING)); 
     registerFunction("substring", new StandardSQLFunction("substr", 
       org.hibernate.type.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; 
    } 
} 

私は自分のアプリケーションを実行している、すべてが順調にはなくなりますデータベースファイルは作成されません。つまり、私のテーブルも作成されません。

これは過去3時間でこれと苦労しており、解決策が見つかりませんでした。

+0

私も同じ問題を抱えていますが、解決策を見つけましたか? – Ha11owed

+0

あなたはコードとバージョンの書き込みにどのプラットフォームを使用しましたか? –

+0

最後に問題を解決しましたか?はいの場合は、ソリューションを共有できますか?ありがとう。 –

答えて

3

私はとても長い時間がかかりましたが、残念ですが、ここで私の問題を解決しました。 DIALECTファイルを見つけたほうが良いファイルに変更しました。

package gear7.partyrock.utils; 

/* 
* 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. 
* 
*/ 

import java.sql.Types; 
import org.hibernate.dialect.Dialect; 

import org.hibernate.dialect.function.AbstractAnsiTrimEmulationFunction; 
import org.hibernate.dialect.function.NoArgSQLFunction; 
import org.hibernate.dialect.function.SQLFunction; 
import org.hibernate.dialect.function.SQLFunctionTemplate; 
import org.hibernate.dialect.function.StandardSQLFunction; 
import org.hibernate.dialect.function.VarArgsSQLFunction; 
import org.hibernate.type.StandardBasicTypes; 

public class SQLiteDialect extends Dialect { 
    public SQLiteDialect() { 
    registerColumnType(Types.BIT, "boolean"); 
    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($p, $s)"); 
    registerColumnType(Types.DECIMAL, "decimal"); 
    registerColumnType(Types.CHAR, "char"); 
    registerColumnType(Types.VARCHAR, "varchar($l)"); 
    registerColumnType(Types.LONGVARCHAR, "longvarchar"); 
    registerColumnType(Types.DATE, "date"); 
    registerColumnType(Types.TIME, "time"); 
    registerColumnType(Types.TIMESTAMP, "datetime"); 
    registerColumnType(Types.BINARY, "blob"); 
    registerColumnType(Types.VARBINARY, "blob"); 
    registerColumnType(Types.LONGVARBINARY, "blob"); 
    registerColumnType(Types.BLOB, "blob"); 
    registerColumnType(Types.CLOB, "clob"); 
    registerColumnType(Types.BOOLEAN, "boolean"); 

    //registerFunction("abs", new StandardSQLFunction("abs")); 
    registerFunction("concat", new VarArgsSQLFunction(StandardBasicTypes.STRING, "", "||", "")); 
    //registerFunction("length", new StandardSQLFunction("length", StandardBasicTypes.LONG)); 
    //registerFunction("lower", new StandardSQLFunction("lower")); 
    registerFunction("mod", new SQLFunctionTemplate(StandardBasicTypes.INTEGER, "?1 % ?2")); 
    registerFunction("quote", new StandardSQLFunction("quote", StandardBasicTypes.STRING)); 
    registerFunction("random", new NoArgSQLFunction("random", StandardBasicTypes.INTEGER)); 
    registerFunction("round", new StandardSQLFunction("round")); 
    registerFunction("substr", new StandardSQLFunction("substr", StandardBasicTypes.STRING)); 
    registerFunction("substring", new SQLFunctionTemplate(StandardBasicTypes.STRING, "substr(?1, ?2, ?3)")); 
    registerFunction("trim", new AbstractAnsiTrimEmulationFunction() { 
     protected SQLFunction resolveBothSpaceTrimFunction() { 
      return new SQLFunctionTemplate(StandardBasicTypes.STRING, "trim(?1)"); 
     } 

     protected SQLFunction resolveBothSpaceTrimFromFunction() { 
      return new SQLFunctionTemplate(StandardBasicTypes.STRING, "trim(?2)"); 
     } 

     protected SQLFunction resolveLeadingSpaceTrimFunction() { 
      return new SQLFunctionTemplate(StandardBasicTypes.STRING, "ltrim(?1)"); 
     } 

     protected SQLFunction resolveTrailingSpaceTrimFunction() { 
      return new SQLFunctionTemplate(StandardBasicTypes.STRING, "rtrim(?1)"); 
     } 

     protected SQLFunction resolveBothTrimFunction() { 
      return new SQLFunctionTemplate(StandardBasicTypes.STRING, "trim(?1, ?2)"); 
     } 

     protected SQLFunction resolveLeadingTrimFunction() { 
      return new SQLFunctionTemplate(StandardBasicTypes.STRING, "ltrim(?1, ?2)"); 
     } 

     protected SQLFunction resolveTrailingTrimFunction() { 
      return new SQLFunctionTemplate(StandardBasicTypes.STRING, "rtrim(?1, ?2)"); 
     } 
    }); 
    //registerFunction("upper", new StandardSQLFunction("upper")); 
    } 

    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 boolean bindLimitParametersInReverseOrder() { 
    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 true; // TODO Validate 
    } 

    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 true; 
    } 

    /* not case insensitive for unicode characters by default (ICU extension needed) 
    public boolean supportsCaseInsensitiveLike() { 
    return true; 
    } 
    */ 

    public boolean supportsTupleDistinctCounts() { 
    return false; 
    } 

    public String getSelectGUIDString() { 
    return "select hex(randomblob(16))"; 
    } 
} 

そして私は私のpersistence.xmlこれは私のために解決

<property name="hibernate.hbm2ddl.auto" value="update"/> 

にこの行を変更しました。 :)

0

コードを実行すると、データベースに物事を保存できますか?

persistence.xmlを見ると、<property name="hibernate.hbm2ddl.auto" value="create-drop"/>が表示され、休止状態の起動時にDBが作成され、休止状態が終了すると削除されます。 DBが作成されているのは簡単ですが、DBを削除しているHibernateはそれを削除しています。

+0

私は既にcreate-update、update、validate、createなどの可能な値を試していました。 – renatojf

0

だけpersistence.xmlで< /プロパティ> を作成>この <プロパティ名= "hbm2ddl.auto" を追加します。それが動作します。しかし、作成以外は機能していません。

関連する問題