2014-12-29 4 views
11

Ho un problema successivo durante la distribuzione dell'applicazione su openshift. Uso un server di applicazioni wildfly e la cartuccia PostgreSQL.Impossibile completare l'aggiornamento dello schema: org.h2.jdbc.JdbcSQLException: tabella "PG_CLASS" non trovata; Istruzione SQL

In persistence.xml ho impostato la proprietà "hibernate.hbm2ddl.auto" value = "update". In moduli wildfly in org/main/postgresql vedo che uso wildfly 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] 

I'am utilizzare una sospensione come JPA (hibernate-core-4.3.6). E penso che questo problema con diverse versioni di Postgresql 9.2 e 9.3 Qualcuno potrebbe spiegarmi come cambiare il dialetto in ibernazione alla versione 9.2 di Postgres o cambiare il modulo di libreria postgresql su openshift?

+0

Quella query 'select relname da pg_class dove relkind = 'S'' dovrebbe funzionare correttamente per quasi tutte le versioni di postgresql. Il fatto che il messaggio di errore indichi il nome della tabella in maiuscolo sembra tuttavia sospetto. – harmic

+0

@Klimov Piter La tabella si chiama "" pg_catalog "." Pg_class "' la maggior parte sicuramente non '" PG_CLASS "' sebbene 'PG_CLASS' sia di solito accettabile, le virgolette rendono significativo il caso maiuscolo e non mi fido completamente degli sviluppatori hybernate per offuscare il messaggio di errore aggiungendo virgolette spurie al nome della tabella. Ci dovrebbe essere un errore di corrispondenza nel log del server postgres. lo aggiungerai alla domanda per favore. – Jasen

+1

@Jasen grazie mille! Cambio il mio file delle proprietà di ibernazione da hibernate.hbm2ddl.auto = "update" a "create" e mi aiuta –

risposta

5

Ha avuto lo stesso errore di recente. Si prega di aprire standalone.xml del wildfly (o stand-alone-full.xml o seconda di quale si sta utilizzando) e trovare ed eliminare il seguente frammento:

<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"/> 

Importante: assicurarsi di chiudere wildfly giù prima modifica, altrimenti si sovrascriverà le modifiche la prossima volta che si spegne.

+0

Perché funziona? – Felk

+0

Buona domanda! Ad essere onesti, non ne sono sicuro. Sembra che questo DS predefinito stia sovrascrivendo parzialmente le impostazioni di connessione db delle distribuzioni su questo server applicazioni. Non l'ho approfondito ulteriormente però una volta che l'ho fatto funzionare ... – Toastor

5

Ho appena cambiato la proprietà di ibernazione hibernate.hbm2ddl.auto per creare valore. Questo problema risolto per me.

1

1) verificare se si utilizza correttamente il dialetto in application.properties

spring.jpa.database-platform 

2) e verificare il valore di spring.jpa.hibernate.ddl-auto

0

Avete bisogno di questa proprietà spring.jpa.database-platform = org .hibernate.dialect.H2Dialect

Problemi correlati