2016-04-22 135 views
2

我正在使用Spring MVC,Hibernate和SQLite,當我運行服務器時,每件事情都可以正常工作,但數據庫沒有創建,並且沒有異常。當我從一個Java類開始persistence.xml它創建數據庫Spring MVC Hibernate + SQLite not創建數據庫

public static void main(String[] args) throws Exception { 

     ApplicationContext context = new ClassPathXmlApplicationContext(
       "/META-INF/persistence-config.xml"); 
     String[] names = context.getBeanDefinitionNames(); 

     System.out.println(context.getBeanDefinitionCount()); 
     for (String name : names) { 
      System.out.println("name Bean == " + context.getBean(name).getClass()); 
     } 

} 

這是persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:util="http://www.springframework.org/schema/util" 
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/jee 
    http://www.springframework.org/schema/jee/spring-jee.xsd 
    http://www.springframework.org/schema/util 
    http://www.springframework.org/schema/util/spring-util.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <!-- Load database property file --> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 

    <context:annotation-config /> 

    <!-- Tell Spring where to scan for components --> 
    <context:component-scan base-package="com.binov" /> 
    <context:component-scan base-package="org.hibernate" /> 


    <!-- Create datasource bean --> 

    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="org.sqlite.JDBC" /> 
     <property name="url" value="jdbc:sqlite:franchise.db" /> 
     <property name="username" value="" /> 
     <property name="password" value="" /> 
    </bean> 


    <!-- Create Entity manager - JPA --> 

    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="com.binov.franchise.*" /> 

     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
     </property> 

     <!-- <property name="persistenceProvider"> 
      <bean class="org.hibernate.jpa.HibernatePersistenceProvider" /> 
     </property> --> 

     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.hbm2ddl.auto">create</prop> 
       <prop key="hibernate.dialect">org.hibernate.dialect.SQLiteDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 

    </bean> 

    <tx:annotation-driven /> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 

<tx:annotation-driven transaction-manager="transactionManager"/> 
    <tx:annotation-driven /> 

</beans>  

這是SQLiteDialect

package org.hibernate.dialect; 

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))"; 
    } 
} 
+1

任何幫助請! –

回答

0

你試過把一個絕對的URL(與W/R per任務)在您的JDBC URL屬性?

例如:

<property name="url" value="jdbc:sqlite:c:\\franchise.db" /> (in Windows) 

檢查如果數據庫在正確的道路上創建(C:/franchise.db)。