这是WildFly 10.0中 Hibernate 版本不匹配的后续问题。
为了完整起见,简要地重申问题。我有2个项目,一个是普通的java项目(带有maven):,core
另一个是非maven动态web项目:webapi
。后者充当core
.
core
使用休眠没有任何问题。它定义persistence.xml
(inside 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 模块安装。
但是,现在当我部署webapi
到 WildFly 10.0 时,我收到以下错误:
[org.jboss.as.server.deployment](MSC 服务线程 1-8)WFLYSRV0027:开始部署“webapi.war”(运行时名称:“webapi.war”)
[org.jboss.as.jpa](MSC 服务线程 1-1)WFLYJPA0002:读取应用程序的 persistence.xml
[org.jboss.as.jpa](ServerService 线程池 -- 67)WFLYJPA0010:启动持久性单元(第 1 阶段,共 2 阶段)服务 'webapi.war#app'
[org.hibernate.jpa.internal.util.LogHelper] (ServerService 线程池 -- 67) HHH000204: 处理 PersistenceUnitInfo [名称: app ...]
[org.hibernate.orm.deprecation] (ServerService Thread Pool -- 67) HHH90000001: 发现指定扫描器 [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 阶段)服务 'webapi.war#app'
[org.hibernate.dialect.Dialect](ServerService线程池——67)HHH000400:使用方言:org.hibernate.dialect.SQLServer2008Dialect
[org.hibernate.envers.boot.internal.EnversServiceImpl] (ServerService Thread Pool -- 67) Envers 集成启用了吗?: 真的
[org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl](ServerService 线程池 -- 67)GenerationTarget 遇到异常接受命令:通过 JDBC 语句执行 DDL 时出错:org.hibernate.tool.schema.spi.CommandAcceptanceException:通过执行 DDL 时出错JDBC 语句 在 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) 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) 在 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:877) 在 org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl。 build(TwoPhaseBootstrapImpl.java:44) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:154) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl. java:117) 在 org.wildfly。security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:182) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java :1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745) 在 org.jboss.threads.JBossThread.run(JBossThread.爪哇:320)在 org.jboss.threads.JBossThread.run(JBossThread.java:320) 处运行(Thread.java:745)在 org.jboss.threads.JBossThread.run(JBossThread.java:320) 处运行(Thread.java:745)
原因:org.h2.jdbc.JdbcSQLException: Schema "DBO" not found; 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) 在 org.h2.message.DbException.get(DbException.java:171) 在 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) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:156) at 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
asvalidate
而不是 时update
,我收到以下错误:
org.hibernate.tool.schema.spi.SchemaManagementException:模式验证:缺少表 [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>
然而,这些都没有奏效。