Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

JPA e Hibernate - Problema com JBoss

Atualmente quando executo o seguinte comando através de um método main qualquer, as tabelas no meu banco são criadas corretamente:

Persistence.createEntityManagerFactory("exemplo");

Ou seja, as configurações JPA estão aparentemente corretas.

Porém, quando subo o projeto no Jboss, as tabelas não são criadas. O Hibernate é "executado" durante o log, porém não há efeito no banco.

Log do JBoss:

2017-11-26 12:50:22,908 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (ServerService Thread Pool -- 59) HHH000227: Running hbm2ddl schema export
2017-11-26 12:50:22,913 INFO  [stdout] (ServerService Thread Pool -- 59) Hibernate: 
2017-11-26 12:50:22,913 INFO  [stdout] (ServerService Thread Pool -- 59)     drop table TB_COMPANY cascade constraints
2017-11-26 12:50:22,914 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (ServerService Thread Pool -- 59) HHH000389: Unsuccessful: drop table TB_COMPANY cascade constraints
2017-11-26 12:50:22,914 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (ServerService Thread Pool -- 59) Table "TB_COMPANY" not found; SQL statement:

    drop table TB_COMPANY cascade constraints [42102-173]
2017-11-26 12:50:22,915 INFO  [stdout] (ServerService Thread Pool -- 59) Hibernate: 
2017-11-26 12:50:22,915 INFO  [stdout] (ServerService Thread Pool -- 59)     create table TB_COMPANY (
2017-11-26 12:50:22,915 INFO  [stdout] (ServerService Thread Pool -- 59)         PK_COMPANY number(10,0) not null,
2017-11-26 12:50:22,915 INFO  [stdout] (ServerService Thread Pool -- 59)         NM_COMAPNY varchar2(128 char) not null,
2017-11-26 12:50:22,915 INFO  [stdout] (ServerService Thread Pool -- 59)         primary key (PK_COMPANY)
2017-11-26 12:50:22,915 INFO  [stdout] (ServerService Thread Pool -- 59)     )
2017-11-26 12:50:22,916 INFO  [org.hibernate.tool.hbm2ddl.SchemaExport] (ServerService Thread Pool -- 59) HHH000230: Schema export complete

Meu persistence (já cheguei a utilizar create/update/validate/create-drop, porém não dá resultado):

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

    <persistence-unit name="exemplo">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />

            <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe" />
            <property name="javax.persistence.jdbc.user" value="usuario" />
            <property name="javax.persistence.jdbc.password" value="senha" />

            <property name="hibernate.hbm2ddl.auto" value="create" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>

Estou utilizando atualmente: Jboss EAP 7.0.0 JavaEE 7 Hibernate 5.2.12 Java 1.8

Porém já utilizei Java 1.7, Java EE 6 e não resolveu o problema.

Não sei se é falta de alguma configuração específica do projeto, mas realmente não funciona se executo dentro do servidor. Alguém tem noção onde estou errando?

Agradeço deste já.

5 respostas

Olha, eu to achando que é mais alguma coisa do oracle do que do hibernate em si... quando você sobe o projeto pelo jboss e as tabelas ainda não estão criadas, dá o mesmo o problema? Estou me apegando a essa mensagem aqui:

ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (ServerService Thread Pool -- 59) HHH000389: Unsuccessful: drop table TB_COMPANY cascade constraints

Como ta create no persistence.xml, ele deve ta tentando dropar para criar e aí ta dando ruim... só um chute, ok? vamos vendo.

Então @Alberto, quando eu rodo dentro de um Main, mesmo que dê esse erro, dá certo (até porque realmente não existe a tabela, mas ele cria depois).

Mas quando rodo no servidor Jboss ele dá problema.

Outro ponto: Quando eu rodo com a opção "validate", com as devidas tabelas criadas, ele roda normalmente dentro de um Main. Porém quando rodo pelo servidor Jboss/Wildfly/Tomcat ele fala que tá com problema e não encontra a tabela ALL_SEQUENCES kkk

Log com validate:

2017-11-26 19:15:17,143 INFO  [org.hibernate.validator.internal.util.Version] (ServerService Thread Pool -- 63) HV000001: Hibernate Validator 5.3.5.Final
2017-11-26 19:15:17,393 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (ServerService Thread Pool -- 63) SQL Error: 42102, SQLState: 42S02
2017-11-26 19:15:17,393 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (ServerService Thread Pool -- 63) Table "ALL_SEQUENCES" not found; SQL statement:
 select sequence_name from all_sequences  union select synonym_name   from all_synonyms us, all_sequences asq  where asq.sequence_name = us.table_name    and asq.sequence_owner = us.table_owner [42102-193]
2017-11-26 19:15:17,395 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 63) MSC000001: Failed to start service jboss.persistenceunit."oftalmoprev.war#oftalmoprev": org.jboss.msc.service.StartException in service jboss.persistenceunit."oftalmoprev.war#oftalmoprev": javax.persistence.PersistenceException: [PersistenceUnit: oftalmoprev] Unable to build Hibernate SessionFactory

É um horror... Eu já não sei mais que tipo de teste eu posso fazer, se são versões que estão incompatíveis, se é o dialeto Oracle, se é o servidor... Mas já tentei de várias formas, só do jeito certo que ainda não.

solução!

Oi Giovane, está meio complicado mesmo. Meu chute é que a versão do hibernate que está sendo usada pelo seu jboss não é a mesma que você está rodando com o seu main. você pode tentar trocar o dialeto também no persistence.xml, para ver se com algum diferente vai.

Realmente está complicado demais kkk E deve ser coisa boba para arrumar. Troquei alguns dialetos, mas erros persistem, a única coisa que não persiste é o hibernate no jboss kkk

Você sabe como verificar que versão do Hibernate está sendo utilizada no Jboss/Wildfly?

@Alberto, consegui resolver! UFA! haha

Quando eu utilizo o Oracle10gDialect, ele funciona apenas no main e não funciona no servidor. Quando uso o H2Dialect, ele funciona no servidor, mas não no main.

Removi do persistence, cada um utiliza o que quiser.

Não vou me aprofundar pra entender o porquê que isso ocorre, apenas vou aceitar e continuar os cursos. Quando eu tiver mais entendedor das coisas eu volto para entender haha

Obrigado pela força!