persistence.xml中的hibernate.hbm2ddl.auto被忽略

时间:2015-11-19 02:49:33

标签: spring hibernate jpa

我的应用程序中有以下persistence.xml:

<persistence-unit name="mydb" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.transaction.flush_before_completion" value="true" />
        <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" />
        <property name="hibernate.search.default.directory_provider" value="filesystem" />
        <property name="hibernate.enable_lazy_load_no_trans" value="true" />
        <property name="hibernate.connection.CharSet" value="UTF-8" />
        <property name="hibernate.connection.characterEncoding" value="UTF-8"/>
        <property name="hibernate.connection.useUnicode" value="true" />
    </properties>
</persistence-unit>

我没有将hibernate.hbm2ddl.auto设置为任何值。我希望在启动应用程序时没有完成hbm2ddl的事情,但是hibernate检查并创建表。 我也尝试将值设置为空字符串“”,但这也无济于事。

当我将休眠日志级别增加到“debug”时,我看到以下内容:

----------> Parent Classloader: org.apache.catalina.loader.StandardClassLoader@5985910 
excludeUnlistedClasses: false
JTA datasource: null
Non JTA datasource: org.apache.tomcat.jdbc.pool.DataSource@41c38891{ConnectionPool[defaultAutoCommit=null; defaultReadOnly=null; defaultTransactionIsolation=-1; defaultCatalog=null; driverClassName=oracle.jdbc.driver.OracleDriver; maxActive=20; maxIdle=20; minIdle=5; initialSize=5; maxWait=30000; testOnBorrow=true; testOnReturn=true; timeBetweenEvictionRunsMillis=5000; numTestsPerEvictionRun=0; minEvictableIdleTimeMillis=60000; testWhileIdle=false; testOnConnect=false; password=********; url=jdbc:oracle:thin:@localhost:1521:orcl; username=myuser; validationQuery=null; validatorClassName=null; validationInterval=30000; accessToUnderlyingConnectionAllowed=true; removeAbandoned=false; removeAbandonedTimeout=60; logAbandoned=false; connectionProperties=null; initSQL=null; jdbcInterceptors=null; jmxEnabled=true; fairQueue=true; useEquals=true; abandonWhenPercentageFull=0; maxAge=0; useLock=false; dataSource=null; dataSourceJNDI=null; suspectTimeout=0; alternateUsernameAllowed=false; commitOnReturn=false; rollbackOnReturn=false; useDisposableConnectionFacade=true; logValidationErrors=false; propagateInterruptState=false; }
Transaction type: RESOURCE_LOCAL
PU root URL: file:/C:/apache-tomcat-7.0.39/webapps/mywebapp/WEB-INF/classes
Shared Cache Mode: UNSPECIFIED
Validation Mode: AUTO
Jar files URLs []
Managed classes names []
Mapping files names []
Properties [
    hibernate.transaction.flush_before_completion: true
    hibernate.cache.provider_class: org.hibernate.cache.HashtableCacheProvider
    hibernate.connection.useUnicode: true
    hibernate.connection.CharSet: UTF-8
    hibernate.hbm2ddl.auto: 
    hibernate.search.default.directory_provider: filesystem
    hibernate.show_sql: true
    hibernate.enable_lazy_load_no_trans: true
    hibernate.connection.characterEncoding: UTF-8]

并进一步:

2015-11-19 03:25:07.511 [DEBUG] (localhost-startStop-1) org.hibernate.internal.SessionFactoryImpl  - Instantiating session factory with properties: {java.vendor=Oracle Corporation, sun.java.launcher=SUN_STANDARD, [...] hibernate.enable_lazy_load_no_trans=true, org.apache.catalina.startup.ContextConfig.jarsToSkip=, java.specification.vendor=Oracle Corporation, hibernate.hbm2ddl.auto=update, [...]

似乎该属性被其他东西覆盖。

我没有hibernate.cfg.xml文件。

启动应用程序时,我必须做什么才能使hibernate没有任何hbm2ddl内容?

1 个答案:

答案 0 :(得分:0)

我想我找到了解决方案:这是EntityManager的定义:

<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="false" />
        </bean>
    </property>
</bean>

Afetr将“generateDdl”设置为“false”启动应用程序时没有完成DDL。

相关问题