Ошибка гибернации, когда hbm2ddl.auto установлен для обновления - PullRequest
0 голосов
/ 17 ноября 2018

когда я устанавливаю значение hibernate.hbm2ddl.auto для создания, я не получаю ошибок, но когда я устанавливаю его для обновления, я получаю ошибку.Мне нужно создать таблицы и обновить их, поэтому мне нужно обновить значение.есть идеи, что может пойти не так?

здесь есть ошибка:

15: 55: 19,148 ОШИБКА [org.jboss.as.controller.management-operation] (загрузка контроллера)Поток) WFLYCTL0013: Операция ("развертывание") не выполнена - адрес: ([("deploy" => "WebService.war")]) - описание ошибки: {"WFLYCTL0080: Failed services" => {"jboss.persistenceunit. \"WebService.war # swap \" "=>" javax.persistence.PersistenceException: [PersistenceUnit: swap] Невозможно построить Hibernate SessionFactory Причины: javax.persistence.PersistenceException: [PersistenceUnit: swap] Невозможно построить Hibernate SessionFactory Причины:org.hibernate.exception.SQLGrammarException: Невозможно построить DatabaseInformation. Вызвано: org.h2.jdbc.JdbcSQLException: Таблица \ "PG_CLASS \" не найдена; оператор SQL: выберите relname из pg_class, где relkind = 'S' [42102-193]"}} 15: 55: 19,154 INFO [org.jboss.as.server] (Пул потоков ServerService - 37) WFLYSRV0010: Развернут" WebService.war "(имя среды выполнения:" WebService.war ") 15: 55: 19,155яNFO [org.jboss.as.server] (Пул потоков ServerService - 37) WFLYSRV0010: Развернуто «test.war» (имя-среды выполнения: «test.war») 15: 55: 19,155 INFO [org.jboss.as.controller] (поток загрузки контроллера) WFLYCTL0183: отчет о состоянии службы WFLYCTL0186: службы, которые не удалось запустить: служба jboss.persistenceunit. "WebService.war # swap": javax.persistence.PersistenceException: [PersistenceUnit: swap] Невозможно построить Hibernate SessionFactory

и вот мой постоянный xml-файл:

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

http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> org.hibernate.jpa.HibernatePersistenceProvider

<class>org.Swap.WebService.Model.User</class>
<class>org.Swap.WebService.Model.BaseEntity</class>

<properties>
        <!-- Hibernate properties -->
        <property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="hibernate.connection.zeroDateTimeBehavior" value="convertToNull" />
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>

        <!-- Database properties -->
        <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> <!-- DB Driver -->
        <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://127.0.0.1:5432/swap" /> <!-- BD Mane -->
        <property name="javax.persistence.jdbc.user" value="hidden" /> <!-- DB User -->
        <property name="javax.persistence.jdbc.password" value="hidden" /> <!-- DB Password -->
    </properties>
</persistence-unit>

Редактировать: если я запускаю wildfly с

<property name="hibernate.hbm2ddl.auto" value="create"/>

, то настройка его обновления и публикации будет работать, пока я не перезапущу wildfly.это может быть проблема с загрузкой wildfly?

EDIT2: вот данные из моего автономного xml:

 <datasources>
            <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                <driver>h2</driver>
                <security>
                    <user-name>sa</user-name>
                    <password>sa</password>
                </security>
            </datasource>
            <datasource jta="false" jndi-name="java:jboss/datasources/swap" pool-name="swap" enabled="true" use-java-context="true">
                <connection-url>jdbc:postgresql://127.0.0.1:5432/swap?useUnicode=yes&amp;characterEncoding=UTF-8</connection-url>
                <driver>org.postgresql</driver>
                <security>
                    <user-name>postgres</user-name>
                    <password>postgres</password>
                </security>
            </datasource>
            <drivers>
                <driver name="h2" module="com.h2database.h2">
                    <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                </driver>
                <driver name="org.postgresql" module="org.postgresql">
                    <driver-class>org.postgresql.Driver</driver-class>
                    <xa-datasource-class>org.postgresql.Driver</xa-datasource-class>
                </driver>
            </drivers>
        </datasources>

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Благодаря przemek hertel мне удалось заставить его работать.я удалил h2 из источника данных и драйвера

<datasources>
            <datasource jndi-name="java:jboss/datasources/swap" pool-name="swap" enabled="true" use-java-context="true">
                <connection-url>jdbc:postgresql://127.0.0.1:5432/swap?useUnicode=yes&amp;characterEncoding=UTF-8</connection-url>
                <driver>org.postgresql</driver>
                <security>
                    <user-name>postgres</user-name>
                    <password>postgres</password>
                </security>
            </datasource>
            <drivers>
                <driver name="org.postgresql" module="org.postgresql">
                    <driver-class>org.postgresql.Driver</driver-class>
                    <xa-datasource-class>org.postgresql.Driver</xa-datasource-class>
                </driver>
            </drivers>
        </datasources>

, и я удалил эту строку:

   <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>

и теперь он работает!спасибо всем за помощь.

0 голосов
/ 17 ноября 2018

Проблема в диалекте и драйвере.

Ваш спящий режим использует драйвер H2 с диалектом Postgres.

Caused by: org.h2.jdbc.JdbcSQLException:

Вы можете увидеть в журналах гибернации, какой драйвер и диалект он использует. Вот фрагмент, показывающий, как должны выглядеть журналы гибернации:

INFO  [Version] - HHH000412: Hibernate Core {4.3.7.Final}
INFO  [Environment] - HHH000206: hibernate.properties not found
INFO  [Environment] - HHH000021: Bytecode provider name : javassist
INFO  [MppNamingStrategy] - using naming strategy: MppNamingStrategy
INFO  [Version] - HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
DEBUG [JdbcServicesImpl] - Driver ->
       name : H2 JDBC Driver
    version : 1.4.196 (2017-06-10)
      major : 1
      minor : 4
DEBUG [JdbcServicesImpl] - JDBC version : 4.0
INFO  [Dialect] - HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
INFO  [ASTQueryTranslatorFactory] - HHH000397: Using ASTQueryTranslatorFactory
INFO  [Version] - HV000001: Hibernate Validator 4.3.2.Final
INFO  [SchemaValidator] - HHH000229: Running schema validator

В этом примере вы можете видеть, что hibernate использует

  • Драйвер H2 JDBC
  • org.hibernate.dialect.H2Dialect

В вашей трассировке стека мы видим, что в спящем режиме используется диалект postgres (ОК), но с драйвером H2 (плохо)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...