2014-12-29 10 views
11

Ich habe nächstes Problem, wenn Anwendung auf openshift bereitstellen. Ich benutze einen Wildfly-Anwendungsserver und PostgreSQL-Kassette.Schema-Aktualisierung konnte nicht abgeschlossen werden: org.h2.jdbc.JdbcSQLException: Tabelle "PG_CLASS" nicht gefunden; SQL-Anweisung

In persistence.xml habe ich die Eigenschaft "hibernate.hbm2ddl.auto" value = "update" gesetzt. In Wildfly Module in org/main/postgresql i sehen, dass Wildfly Verwendung postgresql-9,3-1102-jdbc41.jar

12:12:14,760 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] (ServerService Thread Pool -- 62) HHH000319: Could not get database metadata: org.h2.jdbc.JdbcSQLException: Table "PG_CLASS" not found; SQL statement: 
select relname from pg_class where relkind='S' [42102-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.readTableOrView(Parser.java:4864) 
     at org.h2.command.Parser.readTableFilter(Parser.java:1107) 
     at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1713) 
     at org.h2.command.Parser.parseSelectSimple(Parser.java:1821) 
     at org.h2.command.Parser.parseSelectSub(Parser.java:1707) 
     at org.h2.command.Parser.parseSelectUnion(Parser.java:1550) 
     at org.h2.command.Parser.parseSelect(Parser.java:1538) 
     at org.h2.command.Parser.parsePrepared(Parser.java:405) 
     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.executeQuery(JdbcStatement.java:72) 
     at org.jboss.jca.adapters.jdbc.WrappedStatement.executeQuery(WrappedStatement.java:344) 
     at org.hibernate.tool.hbm2ddl.DatabaseMetadata.initSequences(DatabaseMetadata.java:178) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
     at org.hibernate.tool.hbm2ddl.DatabaseMetadata.<init>(DatabaseMetadata.java:92) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
     at org.hibernate.tool.hbm2ddl.DatabaseMetadata.<init>(DatabaseMetadata.java:84) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
     at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:196) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
     at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:178) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
     at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:522) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
     at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final] 
     at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final] 
     at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
     at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final] 
     at org.jboss.as.jpa.hibernate4.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44) [jipijapa-hibernate4-3-1.0.1.Final.jar:] 
     at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:154) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final] 
     at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:117) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final] 
     at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.8.0_05] 
     at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:474) [wildfly-security-manager-1.0.0.Final.jar:1.0.0.Final] 
     at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:182) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final] 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_05] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_05] 
     at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_05] 
     at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final.jar:2.1.1.Final] 

Ich bin ein Ruhezustand als JPA verwenden (Ruhezustand-core-4.3.6). Und ich denke, dass dieses Problem mit verschiedenen Versionen von Postgresql 9.2 und 9.3 Kann mir jemand erklären, wie man den Hibernate-Dialekt bei 9.2 Postgres-Version ändern oder PostgreSQL-Bibliotheksmodul auf OpenShift ändern?

+0

Diese Abfrage 'wählen Relname von pg_class, wo relkind = 'S'sollte für so ziemlich jede Version von postgresql OK funktionieren. Die Tatsache, dass die Fehlermeldung den Tabellennamen in Großbuchstaben meldet, erscheint jedoch verdächtig. – harmic

+0

@Klimov Piter Die Tabelle heißt '" pg_catalog "." Pg_class "' definitiv nicht '" PG_CLASS "' obwohl 'PG_CLASS' normalerweise akzeptabel ist, machen Anführungszeichen den Fall bedeutungsvoll und ich traue den hybernate Entwicklern nicht vollständig um die Fehlermeldung durch Hinzufügen falscher Anführungszeichen zum Tabellennamen zu verschleiern. Es sollte einen übereinstimmenden Fehler im Postgres-Serverprotokoll geben. wirst du das bitte zu der Frage hinzufügen. – Jasen

+1

@Jasen danke viel! Ich ändere meine Hibernate-Eigenschaftendatei von hibernate.hbm2ddl.auto = "update" zu "create" und es hilft mir –

Antwort

5

Hatte den gleichen Fehler in letzter Zeit. Bitte öffnen Sie Ihre Wildfly der standalone.xml (oder Standalone-full.xml oder je nachdem, was Sie verwenden) und finden und löschen Sie das folgende Fragment:

<default-bindings contextservice="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" jms-connection factory="java:jboss/DefaultJMSConnectionFactory" 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"/> 

Wichtig: Stellen Sie sicher, dass Wildfly nach unten vor der Bearbeitung schließen, sonst wird es überschrieben Das ändert sich beim nächsten Mal.

+0

Warum funktioniert das? – Felk

+0

Gute Frage! Um ehrlich zu sein - ich bin mir nicht sicher. Offenbar überschreibt dieser Standard-DS die Einstellungen für die Datenbankverbindung der Bereitstellungen auf diesem Anwendungsserver teilweise. Ich habe mich nicht weiter damit beschäftigt, aber sobald ich es funktionierte ... – Toastor

5

Ich ändern nur Hibernate Eigenschaft hibernate.hbm2ddl.auto Wert zu erstellen. Dies hat das Problem für mich gelöst.

1

1) überprüfen, ob Sie richtig Dialekt in application.properties

spring.jpa.database-platform 

2) und prüfen Sie den Wert von spring.jpa.hibernate.ddl-auto

0

Sie müssen diese Eigenschaft verwenden spring.jpa.database-Plattform = org .hibernate.dialect.H2Dialect

Verwandte Themen