java – Hibernate SQLite没有创建数据库
发布时间:2020-12-14 19:24:34 所属栏目:Java 来源:网络整理
导读:这是我的问题: 我有一个使用JavaFX Hibernate SQLite的桌面应用程序. 这是我的模特: @Entity@Table(name = "usuario")public class Usuario implements AbstractModel,Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Intege
这是我的问题:
我有一个使用JavaFX Hibernate SQLite的桌面应用程序. @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; } 这是我的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> 最后这是我的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",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个小时一直在努力解决这个问题,但找不到任何解决办法. 解决方法
对不起,我花了这么长时间,但这就解决了我的问题.我将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",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,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"/> 这解决了我. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |