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

Hibernate SchemaExport无法首先创建架构

齐意致
2023-03-14

我正在使用Arquillian、JBoss、JPA/Hibernate、H2 DB和Maven运行测试。在我的测试persistence.xml文件中,我有:

<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.show_sql" value="true" />

目前,我有一个User类通过Hibernate注释映射到“users”表。

一切都快开始了。问题是Hibernate正在尝试执行:

drop table my_schema.users if exists

但是模式“my_schema”不存在,所以它失败了(毕竟我是在运行内存中的数据库)。

我如何进入Hibernate状态以执行它似乎忘记的“创建架构my_schema”步骤?

更新:我从Hibernate看到的消息:


09:42:45,402 INFO  [org.jboss.as.jpa] (MSC service thread 1-7) JBAS011402: Starting Persistence Unit Service 'test.war#ccmc'
09:42:45,524 INFO  [org.hibernate.annotations.common.Version] (MSC service thread 1-7) HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
09:42:45,532 INFO  [org.hibernate.Version] (MSC service thread 1-7) HHH000412: Hibernate Core {4.0.1.Final}
09:42:45,535 INFO  [org.hibernate.cfg.Environment] (MSC service thread 1-7) HHH000206: hibernate.properties not found
09:42:45,542 INFO  [org.hibernate.cfg.Environment] (MSC service thread 1-7) HHH000021: Bytecode provider name : javassist
09:42:45,572 INFO  [org.hibernate.ejb.Ejb3Configuration] (MSC service thread 1-7) HHH000204: Processing PersistenceUnitInfo [
    name: ccmc
    ...]
09:42:45,739 INFO  [org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator] (MSC service thread 1-7) HHH000130: Instantiating explicit connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
09:42:45,956 INFO  [org.hibernate.dialect.Dialect] (MSC service thread 1-7) HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
09:42:45,962 WARN  [org.hibernate.dialect.H2Dialect] (MSC service thread 1-7) HHH000431: Unable to determine H2 database version, certain features may not work
09:42:45,965 INFO  [org.hibernate.engine.jdbc.internal.LobCreatorBuilder] (MSC service thread 1-7) HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
09:42:45,973 INFO  [org.hibernate.engine.transaction.internal.TransactionFactoryInitiator] (MSC service thread 1-7) HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
09:42:45,976 INFO  [org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory] (MSC service thread 1-7) HHH000397: Using ASTQueryTranslatorFactory
09:42:46,003 INFO  [org.hibernate.validator.util.Version] (MSC service thread 1-7) Hibernate Validator 4.2.0.Final
09:42:46,269 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-7) HHH000227: Running hbm2ddl schema export
09:42:46,275 INFO  [stdout] (MSC service thread 1-7) Hibernate: drop table ccmc.users if exists
09:42:46,283 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-7) HHH000389: Unsuccessful: drop table ccmc.users if exists
09:42:46,283 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-7) Schema "CCMC" not found; SQL statement:
drop table ccmc.users if exists [90079-161]
09:42:46,284 INFO  [stdout] (MSC service thread 1-7) Hibernate: create table ccmc.users (user_id decimal(19,2) generated by default as identity, email varchar(100) not null unique, primary key (user_id))
09:42:46,285 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-7) HHH000389: Unsuccessful: create table ccmc.users (user_id decimal(19,2) generated by default as identity, email varchar(100) not null unique, primary key (user_id))
09:42:46,285 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-7) Schema "CCMC" not found; SQL statement:
create table ccmc.users (user_id decimal(19,2) generated by default as identity, email varchar(100) not null unique, primary key (user_id)) [90079-161]
09:42:46,286 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-7) HHH000230: Schema export complete

共有1个答案

司徒锐进
2023-03-14

我在另一个SO问题里找到了答案。

定义数据库的连接 URL 时,需要添加以下内容:“INIT=创建架构(如果不存在)”。因此,持久性.xml文件中的完整 URL 如下所示:

<connection-url>jdbc:h2:mem:test-db;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS ccmc</connection-url>

其中ccmc是要创建的模式的名称。参数DB_CLOSE_DELAY与问题无关,可以安全地省略。

 类似资料:
  • 初次见面,请多多关照。我是生在博多,成长在Git社区的「猴子老师」。今天我们要来一起学习版本管理系统「Git」哦。 要把文档还原到编辑前的状态,大家都是怎么做的呢? 最简单的方法就是先备份编辑前的文档。使用这个方法时,我们通常都会在备份的文档名或目录名上添加编辑的日期。但是,每次编辑文档都要事先复制,这样非常麻烦,也很容易出错。 再加上,如果像上图那样毫无命名规则的话,就无法区分哪一个文档是最新的

  • 我想让MIDI音频播放,但当我这样做时,它一直返回错误。 我已经进入,我的权限在

  • 问题内容: 我有一个并且设置,然后在“值”属性的“属性更改”中添加了一个事件侦听器。 首先,它在键入时不会调用事件侦听器方法。但是在“ focusLost”上,它将调用事件侦听器,此后 ,当再次获得焦点时,它将在键入时调用事件侦听器。 我希望事件监听器在任何时间发生任何更改之后都可以被调用(即使在第一时间)。 有什么问题?我该如何解决? 问题答案: 可能您必须在这里查看DocumentListen

  • 我正在使用微软。蔚蓝色的数据计划主义。ApacheAvro 1.0.0-beta1和我正在尝试使用avro架构将事件发送到eventhub,但由于某种原因azure响应为BadRequest:Code“:400,“Detail:”架构验证失败:解析未定义的值路径“u0022typeu0022”时出错,第1行,位置17。我使用的是微软提供的例子,但我也没有运气。 记录={Schema:{“type”

  • 在我找到的文档中: 类对象由Java虚拟机在加载类时自动构造,并通过调用类加载器中的defineClass方法来构造。 我检查了源代码,但没有找到要调用的位置,例如从loadClass方法。请告诉我,根据此方案,谁和何时调用方法: 图像源

  • 问题内容: 我尝试groovysh在Windows 8上打开Groovy Shell(),并得到以下输出: 打印完上述消息后,外壳程序按预期方式启动。 问题答案: 我想以更详细的方式来解释该解决方案(对于Windows用户): 进入“开始”菜单,然后输入regedit搜索字段。 导航到路径HKEY_LOCAL_MACHINE\Software\JavaSoft(10的Windows似乎现在有这样的