org.h2.jdbc.JdbcSQLException:Schema" DBO"找不到

时间:2017-03-24 10:47:18

标签: java hibernate jpa wildfly sqljdbc

这是Hibernate version mismatch in WildFly 10.0的后续问题。

为了完整性,请简要地重述问题。我有2个项目,一个是普通的java项目(使用maven):core,另一个是非maven动态Web项目:webapi。后者在core之上充当休息图层。

core使用hibernate没有任何问题。它定义persistence.xml(内部src/META-INF/),如下所示:

<?xml version="1.0" encoding="utf-8"?>

<persistence 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"
    version="2.0">

    <persistence-unit name="app" transaction-type="RESOURCE_LOCAL">

        <class>data.entities.Anything</class>
        <class>data.entities.Something</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property>
            <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost;databaseName=AppDb"></property>
            <property name="javax.persistence.jdbc.user" value="****"></property>
            <property name="javax.persistence.jdbc.password" value="****"></property>
            <property name="hibernate.default_schema" value="dbo"></property>           
            <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"></property>
            <property name="hibernate.hbm2ddl.auto" value="update"></property>
            <property name="jboss.as.jpa.providerModule" value="org.hibernate:5.2.4.Final" />
        </properties>
    </persistence-unit>
</persistence>

corewebapi现在分别使用hibernate-core 5.2.4.Final,使用maven和WildFly模块安装,如here所述。

但是,现在当我将webapi部署到WildFly 10.0时,我收到以下错误:

  

[org.jboss.as.server.deployment](MSC服务主题1-8)WFLYSRV0027:开始部署&#34; webapi.war&#34; (runtime-name:&#34; webapi.war&#34;)

     

[org.jboss.as.jpa](MSC服务主题1-1)WFLYJPA0002:读取app的persistence.xml

     

[org.jboss.as.jpa](ServerService线程池 - 67)WFLYJPA0010:启动持久性单元(第1阶段2)服务&#39; webapi.war#app&#39;

     

[org.hibernate.jpa.internal.util.LogHelper](ServerService线程池 - 67)HHH000204:处理PersistenceUnitInfo [       名称:app       ...]

     

[org.hibernate.orm.deprecation](ServerService Thread Pool - 67)HHH90000001:发现使用不推荐的设置来指定Scanner [hibernate.ejb.resource_scanner];请改用[hibernate.archive.scanner]

     

[org.jboss.as.connector.deployers.jdbc](MSC服务线程1-1)WFLYJCA0004:部署符合JDBC的驱动程序类com.microsoft.sqlserver.jdbc.SQLServerDriver(6.0版)

     

[org.jboss.as.connector.deployers.jdbc](MSC服务主题1-6)WFLYJCA0018:已启动驱动程序服务,驱动程序名称= webapi.war_com.microsoft.sqlserver.jdbc.SQLServerDriver_6_0

     

[org.jboss.as.jpa](ServerService线程池 - 67)WFLYJPA0010:启动持久性单元(第2阶段,共2期)服务&#39; webapi.war#app&#39;

     

[org.hibernate.dialect.Dialect](ServerService线程池 - 67)HHH000400:使用方言:org.hibernate.dialect.SQLServer2008Dialect

     

[org.hibernate.envers.boot.internal.EnversServiceImpl](ServerService线程池 - 67)是否启用了Envers集成? :真的

     

[org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl](ServerService线程池 - 67) GenerationTarget遇到异常接受命令:通过JDBC语句执行DDL时出错:org.hibernate.tool.schema.spi。 CommandAcceptanceException:通过JDBC语句执行DDL时出错       在org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)       在org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:524)       在org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:470)       在org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:273)       在org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:71)       在org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:203)       在org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:110)       在org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:177)       在org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:66)       在org.hibernate.internal.SessionFactoryImpl。(SessionFactoryImpl.java:309)       在org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445)       在org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:877)       在org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)       在org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1 $ 1.run(PersistenceUnitServiceImpl.java:154)       在org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1 $ 1.run(PersistenceUnitServiceImpl.java:117)       在org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667)       在org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1.run(PersistenceUnitServiceImpl.java:182)       在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)       at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)       在java.lang.Thread.run(Thread.java:745)       在org.jboss.threads.JBossThread.run(JBossThread.java:320)

     

引起:org.h2.jdbc.JdbcSQLException:Schema&#34; DBO&#34;未找到; SQL语句:   create table dbo.Anythings(Id binary(255)not null,CreatedOn datetime not null,IsActive bit,primary key(Id))[90079-173]       在org.h2.message.DbException.getJdbcSQLException(DbException.java:331)       at org.h2.message.DbException.get(DbException.java:171)       at org.h2.message.DbException.get(DbException.java:148)       在org.h2.command.Parser.getSchema(Parser.java:616)       在org.h2.command.Parser.getSchema(Parser.java:623)       在org.h2.command.Parser.parseCreateTable(Parser.java:5302)       在org.h2.command.Parser.parseCreate(Parser.java:3873)       在org.h2.command.Parser.parsePrepared(Parser.java:324)       在org.h2.command.Parser.parse(Parser.java:279)       在org.h2.command.Parser.parse(Parser.java:251)       在org.h2.command.Parser.prepareCommand(Parser.java:218)       在org.h2.engine.Session.prepareLocal(Session.java:428)       在org.h2.engine.Session.prepareCommand(Session.java:377)       在org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1138)       at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:168)       在org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:156)       在org.jboss.jca.adapters.jdbc.WrappedStatement.execute(WrappedStatement.java:198)       在org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)       ......还有20个

无论如何这可以纠正吗?

更新:我认为,它无法连接数据库。当我使用hibernate.hbm2ddl.auto作为validate而不是update时,我收到以下错误:

  

org.hibernate.tool.schema.spi.SchemaManagementException:架构验证:缺少表格[dbo.Anythings]

其他信息:我已将sqljdbc42.jar放入wildfly-10.0.0.Final\modules\system\layers\base\com\microsoft\sqlserver\mainmodule.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!-- JDBC Drivers module.xml file to configure your JDBC drivers-->

<module xmlns="urn:jboss:module:1.3" name="com.microsoft.sqlserver" slot="main">
  <resources>
    <resource-root path="sqljdbc42.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>

我还尝试在sqlserver中添加standalone.xml作为全局子系统:

<subsystem xmlns="urn:jboss:domain:ee:4.0">
    <global-modules>
        <module name="com.microsoft.sqlserver" slot="main"/>
    </global-modules>
...
</subsystem>

然而,这些都没有奏效。

1 个答案:

答案 0 :(得分:5)

这似乎是由您指定数据库连接的方式引起的。在EE环境中,您应该使用数据源定义,在jta-data-source中指定为non-jta-data-sourcepersistence.xml。如JPA 2.1规范(ch.8.2.1.5)中所述,如果您未指定其中任何一个,您的wildfly将使用其默认数据源(名为ExampleDS)部署您的应用程序,该数据源使用h2内存数据库。通过属性(javax.persistence.jdbc.url等)的连接参数将被忽略,因为它们适用于Java SE环境而非Java EE 您需要向wildfly配置添加新的数据源定义(standalone.xml或domain.xml,具体取决于您的设置),或者在应用程序中将数据源定义作为位于<something>-ds.xml的名为WEB-INF的文件提供夹。在这两种情况下,您都需要正确设置MSSQL驱动程序(部署到模块,添加module.xml并将驱动程序定义添加到widlfly config / subsytem = datasources)。这些操作也可以通过jboss-cli接口完成,以避免手动编辑配置文件。 之后,从persistence.xml中删除连接属性,并使用新创建的DS的jndi名称添加jta / non-jta-data-source元素。另外,请删除mssql模块的全局定义

此链接可能对您有用: Wildfly Hibernate + In app datasource definition
JBoss DB Driver+Data source definition via cli

希望有所帮助。