org.h2.jdbc.JdbcSQLException:未找到架构 "DBO"
org.h2.jdbc.JdbcSQLException: Schema "DBO" not found
这是 的后续问题。
为了完整起见,请简要重述问题。我有 2 个项目,一个是普通的 java 项目(有 maven):core
,另一个是非 maven 动态 web 项目:webapi
。后者充当 core
.
之上的休息层
core
使用休眠没有任何问题。它定义 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>
core
和 webapi
现在分别使用 hibernate-core 5.2.4.Final
、maven 和 WildFly 模块安装 here。
但是,现在当我将 webapi
部署到 WildFly 10.0 时,出现以下错误:
[org.jboss.as.server.deployment] (MSC service thread 1-8) WFLYSRV0027: Starting deployment of "webapi.war" (runtime-name: "webapi.war")
[org.jboss.as.jpa] (MSC service thread 1-1) WFLYJPA0002: Read persistence.xml for app
[org.jboss.as.jpa] (ServerService Thread Pool -- 67) WFLYJPA0010: Starting Persistence Unit (phase 1 of 2) Service 'webapi.war#app'
[org.hibernate.jpa.internal.util.LogHelper] (ServerService Thread Pool -- 67) HHH000204: Processing PersistenceUnitInfo [
name: app
...]
[org.hibernate.orm.deprecation] (ServerService Thread Pool -- 67) HHH90000001: Found usage of deprecated setting for specifying Scanner [hibernate.ejb.resource_scanner]; use [hibernate.archive.scanner] instead
[org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-1) WFLYJCA0004: Deploying JDBC-compliant driver class com.microsoft.sqlserver.jdbc.SQLServerDriver (version 6.0)
[org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-6) WFLYJCA0018: Started Driver service with driver-name = webapi.war_com.microsoft.sqlserver.jdbc.SQLServerDriver_6_0
[org.jboss.as.jpa] (ServerService Thread Pool -- 67) WFLYJPA0010: Starting Persistence Unit (phase 2 of 2) Service 'webapi.war#app'
[org.hibernate.dialect.Dialect] (ServerService Thread Pool -- 67) HHH000400: Using dialect: org.hibernate.dialect.SQLServer2008Dialect
[org.hibernate.envers.boot.internal.EnversServiceImpl] (ServerService Thread Pool -- 67) Envers integration enabled? : true
[org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl] (ServerService Thread Pool -- 67) GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement: org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:524)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:470)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:273)
at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:71)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:203)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:110)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:177)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:66)
at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:309)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:877)
at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.run(PersistenceUnitServiceImpl.java:154)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.run(PersistenceUnitServiceImpl.java:117)
at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.run(PersistenceUnitServiceImpl.java:182)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: org.h2.jdbc.JdbcSQLException: Schema "DBO" not found; SQL statement:
create table dbo.Anythings (Id binary(255) not null, CreatedOn datetime not null, IsActive bit, primary key (Id)) [90079-173]
at 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)
at org.h2.command.Parser.getSchema(Parser.java:616)
at org.h2.command.Parser.getSchema(Parser.java:623)
at org.h2.command.Parser.parseCreateTable(Parser.java:5302)
at org.h2.command.Parser.parseCreate(Parser.java:3873)
at org.h2.command.Parser.parsePrepared(Parser.java:324)
at org.h2.command.Parser.parse(Parser.java:279)
at org.h2.command.Parser.parse(Parser.java:251)
at org.h2.command.Parser.prepareCommand(Parser.java:218)
at org.h2.engine.Session.prepareLocal(Session.java:428)
at org.h2.engine.Session.prepareCommand(Session.java:377)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1138)
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:168)
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:156)
at org.jboss.jca.adapters.jdbc.WrappedStatement.execute(WrappedStatement.java:198)
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)
... 20 more
这有什么可以更正的吗?
更新:我想,是连接不上数据库。当我将 hibernate.hbm2ddl.auto
用作 validate
而不是 update
时,出现以下错误:
org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [dbo.Anythings]
附加信息:我已经将 sqljdbc42.jar
放入 wildfly-10.0.0.Final\modules\system\layers\base\com\microsoft\sqlserver\main
,module.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>
但是,其中 none 有效。
这似乎是由您指定数据库连接的方式引起的。在 EE 环境中,您应该使用数据源定义,在 persistence.xml
中指定为 jta-data-source
或 non-jta-data-source
。如 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
的文件提供=15=]文件夹。在这两种情况下,您都需要正确设置 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
希望对您有所帮助。
这是
为了完整起见,请简要重述问题。我有 2 个项目,一个是普通的 java 项目(有 maven):core
,另一个是非 maven 动态 web 项目:webapi
。后者充当 core
.
core
使用休眠没有任何问题。它定义 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>
core
和 webapi
现在分别使用 hibernate-core 5.2.4.Final
、maven 和 WildFly 模块安装 here。
但是,现在当我将 webapi
部署到 WildFly 10.0 时,出现以下错误:
[org.jboss.as.server.deployment] (MSC service thread 1-8) WFLYSRV0027: Starting deployment of "webapi.war" (runtime-name: "webapi.war")
[org.jboss.as.jpa] (MSC service thread 1-1) WFLYJPA0002: Read persistence.xml for app
[org.jboss.as.jpa] (ServerService Thread Pool -- 67) WFLYJPA0010: Starting Persistence Unit (phase 1 of 2) Service 'webapi.war#app'
[org.hibernate.jpa.internal.util.LogHelper] (ServerService Thread Pool -- 67) HHH000204: Processing PersistenceUnitInfo [ name: app ...]
[org.hibernate.orm.deprecation] (ServerService Thread Pool -- 67) HHH90000001: Found usage of deprecated setting for specifying Scanner [hibernate.ejb.resource_scanner]; use [hibernate.archive.scanner] instead
[org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-1) WFLYJCA0004: Deploying JDBC-compliant driver class com.microsoft.sqlserver.jdbc.SQLServerDriver (version 6.0)
[org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-6) WFLYJCA0018: Started Driver service with driver-name = webapi.war_com.microsoft.sqlserver.jdbc.SQLServerDriver_6_0
[org.jboss.as.jpa] (ServerService Thread Pool -- 67) WFLYJPA0010: Starting Persistence Unit (phase 2 of 2) Service 'webapi.war#app'
[org.hibernate.dialect.Dialect] (ServerService Thread Pool -- 67) HHH000400: Using dialect: org.hibernate.dialect.SQLServer2008Dialect
[org.hibernate.envers.boot.internal.EnversServiceImpl] (ServerService Thread Pool -- 67) Envers integration enabled? : true
[org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl] (ServerService Thread Pool -- 67) GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement: org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:524) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:470) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:273) at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:71) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:203) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:110) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:177) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:66) at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:309) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:877) at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.run(PersistenceUnitServiceImpl.java:154) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.run(PersistenceUnitServiceImpl.java:117) at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.run(PersistenceUnitServiceImpl.java:182) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: org.h2.jdbc.JdbcSQLException: Schema "DBO" not found; SQL statement: create table dbo.Anythings (Id binary(255) not null, CreatedOn datetime not null, IsActive bit, primary key (Id)) [90079-173] at 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) at org.h2.command.Parser.getSchema(Parser.java:616) at org.h2.command.Parser.getSchema(Parser.java:623) at org.h2.command.Parser.parseCreateTable(Parser.java:5302) at org.h2.command.Parser.parseCreate(Parser.java:3873) at org.h2.command.Parser.parsePrepared(Parser.java:324) at org.h2.command.Parser.parse(Parser.java:279) at org.h2.command.Parser.parse(Parser.java:251) at org.h2.command.Parser.prepareCommand(Parser.java:218) at org.h2.engine.Session.prepareLocal(Session.java:428) at org.h2.engine.Session.prepareCommand(Session.java:377) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1138) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:168) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:156) at org.jboss.jca.adapters.jdbc.WrappedStatement.execute(WrappedStatement.java:198) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 20 more
这有什么可以更正的吗?
更新:我想,是连接不上数据库。当我将 hibernate.hbm2ddl.auto
用作 validate
而不是 update
时,出现以下错误:
org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [dbo.Anythings]
附加信息:我已经将 sqljdbc42.jar
放入 wildfly-10.0.0.Final\modules\system\layers\base\com\microsoft\sqlserver\main
,module.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>
但是,其中 none 有效。
这似乎是由您指定数据库连接的方式引起的。在 EE 环境中,您应该使用数据源定义,在 persistence.xml
中指定为 jta-data-source
或 non-jta-data-source
。如 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
的文件提供=15=]文件夹。在这两种情况下,您都需要正确设置 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
希望对您有所帮助。