当前位置: 首页 > 知识库问答 >
问题:

组织。h2。jdbc。JdbcSQLException:未找到架构“DBO”

方恺
2023-03-14

这是WildFly 10.0中Hibernate版本不匹配的后续问题。

为了完整起见,请简要地重新说明问题。我有两个项目,一个是普通java项目(使用maven):core,另一个是非maven动态web项目:webapi。后者充当核心顶部的Rest层。

core使用hibernate没有任何问题。它定义了持久性。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核心5.2.4。最终,分别使用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: Readpersistence.xmlfor app

[org.jboss.as.jpa](ServerService线程池--67)WFLYJPA0010:启动持久化单元(第1阶段,共2阶段)服务的webapi。war#应用程序'

[org.hibernate.jpa.internal.util.LogHelper](ServerService线程池--67)HHH000204:处理持久性UnitInfo[name: app...]

[org.hibernate.orm.deprecation](ServerService线程池--67)HHH90000001:找到用于指定扫描程序的不推荐设置的用法[hibernate.ejb.resource_Scanner];改用[hibernate.archive.scanner]

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

[org.jboss.as.connector.deployers.jdbc](MSC服务线程1-6)WFLYJCA0018:启动了驱动程序名为webapi的驱动程序服务。战争。微软sqlserver。jdbc。SQLServerDriver_6_0

[org.jboss.as.jpa](ServerService线程池--67)WFLYJPA0010:启动持久性单元(阶段2 of 2)Service'webapi.war#app'

[org.hibernate.dialogue.dialogue](ServerService线程池--67)HHH000400:使用方言:org。冬眠地方话SQLServer2008方言

[org.hibernate.envers.boot.internal.enversserviceinpl](服务器服务线程池--67)是否启用了envers集成?:符合事实的

[org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl](ServerService线程池--67)GenerationTarget在接受命令时遇到异常:通过JDBC语句执行DDL时出错:org。冬眠工具模式。spi。CommandAcceptanceException:在org上通过JDBC语句执行DDL时出错。冬眠工具模式。内部的执行官。GenerationTargetToDatabase。在org接受(GenerationTargetToDatabase.java:67)。冬眠工具模式。内部的抽象模式管理器。applySqlString(AbstractSchemaMigrator.java:524)位于org。冬眠工具模式。内部的抽象模式管理器。applySqlStrings(AbstractSchemaMigrator.java:470)位于org。冬眠工具模式。内部的抽象模式管理器。org上的createTable(AbstractSchemaMigrator.java:273)。冬眠工具模式。内部的GroupedSchemaMigratorImpl。org上的performTablesMigration(GroupedSchemaMigratorImpl.java:71)。冬眠工具模式。内部的抽象模式管理器。在org上执行迁移(AbstractSchemaMigrator.java:203)。冬眠工具模式。内部的抽象模式管理器。org上的doMigration(AbstractSchemaMigrator.java:110)。冬眠工具模式。spi。SchemaManagementToolCoordinator。在组织上执行DatabaseAction(SchemaManagementToolCoordinator.java:177)。冬眠工具模式。spi。SchemaManagementToolCoordinator。在org上处理(SchemaManagementToolCoordinator.java:66)。冬眠内部的SessionFactoryImpl。(SessionFactoryImpl.java:309)位于org。冬眠靴子内部的SessionFactoryBuilderImpl。在org上构建(SessionFactoryBuilderImpl.java:445)。冬眠jpa。靴子内部的EntityManagerFactoryBuilderImpl。在org上构建(EntityManagerFactoryBuilderImpl.java:877)。jboss。像jpa。冬眠。双相光纤传输线。在org上构建(TwoPhaseBootstrapImpl.java:44)。jboss。像jpa。服务PersistenceUnitServiceImpl$1$1。在org上运行(persistenceunitserviceinpl.java:154)。jboss。像jpa。服务PersistenceUnitServiceImpl$1$1。在org上运行(persistenceunitserviceinpl.java:117)。野蝇。安全经理WildFlySecurityManager。doChecked(WildFlySecurityManager.java:667)位于org。jboss。像jpa。服务PersistenceUnitServiceImpl$1。在java上运行(PersistenceUnitServiceImpl.java:182)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1142)。util。同时发生的线程池执行器$Worker。在java上运行(ThreadPoolExecutor.java:617)。朗。丝线。在org上运行(Thread.java:745)。jboss。线程。JBossThread。运行(JBossThread.java:320)

原因:org。h2。jdbc。JdbcSQLException:未找到架构“DBO”;SQL语句:创建表dbo。任何事物(Id二进制(255)不为空,CreatedOn datetime不为空,IsActive位,主键(Id))[90079-173]在组织中。h2。消息DbException。位于org的getJdbcSQLException(DbException.java:331)。h2。消息DbException。在org上获取(DbException.java:171)。h2。消息DbException。在org上获取(DbException.java:148)。h2。命令解析器。org上的getSchema(Parser.java:616)。h2。命令解析器。org上的getSchema(Parser.java:623)。h2。命令解析器。org上的parseCreateTable(Parser.java:5302)。h2。命令解析器。org上的parseCreate(Parser.java:3873)。h2。命令解析器。parsePrepared(Parser.java:324)位于org。h2。命令解析器。org上的parse(Parser.java:279)。h2。命令解析器。在org上解析(Parser.java:251)。h2。命令解析器。org上的prepareCommand(Parser.java:218)。h2。发动机一场org上的prepareLocal(Session.java:428)。h2。发动机一场org上的prepareCommand(Session.java:377)。h2。jdbc。jdbc连接。org上的prepareCommand(JdbcConnection.java:1138)。h2。jdbc。jdbc语句。org上的executeInternal(JdbcStatement.java:168)。h2。jdbc。jdbc语句。在org上执行(JdbcStatement.java:156)。jboss。jca。适配器。jdbc。包装声明。在org上执行(WrappedStatement.java:198)。冬眠工具模式。内部的执行官。GenerationTargetToDatabase。接受(GenerationTargetToDatabase.java:54)。。。20多

是否存在可以纠正的问题?

更新:我认为,它不能连接数据库。当我使用hibernate.hbm2ddl.auto作为valester而不是date时,我得到以下错误:

组织。冬眠工具模式。spi。SchemaManagementException:架构验证:缺少表[dbo.Anythings]

其他信息:我已经放置了sqljdbc42。jarinwildfly-10.0.0。Final\modules\system\layers\base\com\microsoft\sqlserver\main,以及模块。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个答案

郑宇
2023-03-14

这似乎是由指定DB连接的方式引起的。在EE环境中,您应该使用数据源定义,在持久化中指定为jta数据源非jta数据源xml。正如JPA 2.1规范(第8.2.1.5章)中所述,如果您没有指定其中任何一个,您的wildfly将使用其默认数据源(名为ExampleDS)部署您的应用程序,该数据源使用内存数据库中的h2。通过属性(javax.persistence.jdbc.urletc)的连接参数被忽略,因为它们是针对JavaSE环境而不是JavaEE的
您需要在wildfly配置中添加新的数据源定义(standalone.xml或domain.xml,具体取决于您的设置),或者在应用程序中以名为

此链接可能对您有用:Wildfly Hibernate应用程序内数据源定义
JBoss DB驱动程序通过cli定义数据源

希望有帮助。

 类似资料:
  • 我将Spring boot JPA实体定义为: 上述方法在DB2中效果良好,但在H2中效果不佳。 在application.properties,我有以下设置: 当我做maven的时候 原因:org。h2。jdbc。JdbcSQLSyntaxErrorException:未找到架构“MYSCHEMA”;SQL语句:公共类CarEntity实现可序列化的{。。。 我希望在H2上创建模式,因为我在我的

  • 我是Grails新手,不太熟悉GORM如何将列映射到jdbc实现。基本上我有以下错误: 组织。h2.jdbc。JdbcSQLException 消息: “KEYWORDS BINARY(255)”列的值太长:“X'ACED0005737200116A6176612E7574696C2E486173684D61700507DAC131660D1030002460A6C6F6164466163746F

  • 我已经尝试过在网上找到的一些解决方案,但没有一个有效。我正在使用内存中的持久hibernate数据库。 包装高级。配置。数据库配置;

  • 我正在尝试一个使用H2的示例。但我无法创建内存中的DB。运行以下程序时,我只收到一条错误消息: Java语言sql。SQLException:在java上找不到适合jdbc:h2:mem的驱动程序。sql/java。sql。DriverManager。java上的getConnection(DriverManager.java:702)。sql/java。sql。DriverManager。数据库

  • 我有一个名为user的实体,如下所示: 我还有一个用户摘要类,它旨在返回以进行分页和排序: 这与所有其他实体一起似乎在h2中很好地初始化,从控制台我看到如下内容: 和 甚至: 现在,我已经设置了控制器、服务和存储库... 控制器: 服务:公共接口UserService扩展了UserDetailsService{ 存储库:公共界面UserRepository扩展了JpaRepository{ 最后,

  • 我创建了查询来根据日期间隔和房间类型搜索酒店的可用房间。当我运行此查询时,我得到以下错误: 组织。h2.jdbc。JdbcSQLException:未找到模式“R”;SQL语句: 有什么问题吗? 公共接口RoomRepository扩展JpaRepository{