Problemas com EJJ

8 respostas
XFlameBR

Senhores, boa tarde.

Estou desenvolvendo uma aplicação utilizando EJB, Glassfish e JPA.
O Sistemas esta criando normalmente as tabelas no banco de dados mas quando vou persistir os dados o erro abaixo é apresentado:

INFO: Hibernate: 
    insert 
    into
        estado
        (est_ibge, est_nome, est_sigla) 
    values
        (?, ?, ?)
AVISO: SQL Error: -1, SQLState: 42Y07
GRAVE: O esquema 'POSTGRES' não existe
AVISO: A system exception occurred during an invocation on EJB EstadoFacade method public void br.com.websiscon.bean.AbstractFacade.create(java.lang.Object)
javax.ejb.EJBException
        at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5119)
        at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5017)
        at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4805)
        at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2004)
        at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1955)
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:198)
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:84)
        at $Proxy124.create(Unknown Source)
        at br.com.websiscon.bean.__EJB31_Generated__EstadoFacade__Intf____Bean__.create(Unknown Source)
        at br.com.websiscon.controller.EstadoController.addEstado(EstadoController.java:52)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
        at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
        at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:43)
        at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:72)
        at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
        at javax.faces.component.UICommand.broadcast(UICommand.java:315)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:662)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not insert: [br.com.websiscon.model.Estado]
        at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:637)
        at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:226)
        at com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:258)
        at br.com.websiscon.bean.AbstractFacade.create(AbstractFacade.java:25)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1056)
        at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1128)
        at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5292)
        at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:615)
        at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797)
        at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:567)
        at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:47)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:858)
        at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797)
        at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:567)
        at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:157)
        at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:139)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:858)
        at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797)
        at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:367)
        at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5264)
        at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5252)
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:190)
        ... 46 more
Caused by: org.hibernate.exception.SQLGrammarException: could not insert: [br.com.websiscon.model.Estado]
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:40)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
        at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
        at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
        at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
        at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
        at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
        at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
        at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
        at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
        at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)
        at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)
        at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)
        at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)
        ... 78 more
Caused by: java.sql.SQLSyntaxErrorException: O esquema 'POSTGRES' não existe
        at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
        at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
        at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source)
        at com.sun.gjc.spi.base.ConnectionHolder.prepareStatement(ConnectionHolder.java:535)
        at com.sun.gjc.spi.jdbc40.ConnectionWrapper40.prepareCachedStatement(ConnectionWrapper40.java:251)
        at com.sun.gjc.spi.jdbc40.ConnectionWrapper40.prepareCachedStatement(ConnectionWrapper40.java:48)
        at com.sun.gjc.spi.ManagedConnection.prepareCachedStatement(ManagedConnection.java:880)
        at com.sun.gjc.spi.jdbc40.ConnectionWrapper40.prepareStatement(ConnectionWrapper40.java:169)
        at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)
        at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94)
        at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:30)
        ... 93 more
Caused by: org.apache.derby.client.am.SqlException: O esquema 'POSTGRES' não existe
        at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source)
        at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source)
        at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown Source)
        at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown Source)
        at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown Source)
        at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown Source)
        at org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown Source)
        at org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInputOutput(Unknown Source)
        at org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown Source)
        at org.apache.derby.client.am.PreparedStatement.prepare(Unknown Source)
        at org.apache.derby.client.am.Connection.prepareStatementX(Unknown Source)
        ... 102 more

Alguem pode me ajudar?

8 Respostas

J

Coloca seu persistence.xml ai, pelo erro está tentando conectar no schema POSTGRES na base de dados e ele não existe.

XFlameBR

Segue o persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="WebdemoPU">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <property name="hibernate.hbm2ddl.auto" value="create"/>
      <property name="hibernate.archive.autodetection" value="class, hbm"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
      <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
      <property name="hibernate.connection.url" value="jdbc:postgresql://192.168.x.xxx:5432/xxxx"/>
      <property name="hibernate.connection.username" value="xxxx"/>
      <property name="hibernate.connection.password" value="xxx"/>
      <property name="hibernate.connection.pool_size" value="5"/>
      <!-- <property name="hibernate.hbm2ddl.auto" value="update"/> -->
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.format_sql" value="true"/>
      <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider"/>
      <property name="hibernate.cache.use_query_cache" value="true"/>
      <property name="hibernate.cache.use_second_level_cache" value="true"/>
    </properties>
  </persistence-unit>
</persistence>
J
<property name="hibernate.connection.url" value="jdbc:postgresql://192.168.x.xxx:5432/xxxx"/>

Era essa linha que precisava ver.
Tu colocou os xxx para não divulgar o ip e o schema certo? só verifica no 5432/xxxx, se o xxxx correspondente é POSTGRES. Pelo erro ele está tentando conectar nesse schema, e ele não existe no banco. Verifica se o schema existe no banco, e se esse usuario tem acesso a ele.

XFlameBR
<property name="hibernate.connection.url" value="jdbc:postgresql://192.168.x.xxx:5432/xxxx"/>

xxxx = nome da base de dados.

que neste exemplo seria agenda

<property name="hibernate.connection.url" value="jdbc:postgresql://192.168.x.xxx:5432/agenda"/>

Obrigado.

M

Boa tarde Galera,

Estou com o mesmo problema, estou utilizando o banco de dados Derby (em memória), e ao que me parece o hibernate não está conseguindo gerar a minha estrutura de banco de dados, que é composta por (schema.tabela), sendo que possuo diversos Schemas em todo o Banco de dados. No Sistema Utilizamos o Postgresql, porém estamos adotando a técnica do TDD (Test Driven Development), e para agilizar este processo optamos por utilizar um banco em memória (HSQLDB ou DERBY). Porém não estamos conseguindo da continuidade, devido a esse problema, vou postar o código de mapeamento da classe, o persistence.xml e a excessão gerada.
Se alguém souber ou puder ajudar, agradeço. :D

Mapeamento da Classe:
package br.fpf.laboratorio.entitybean;

// Generated 25/02/2008 16:05:28 by Hibernate Tools 3.2.0.b10

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cascade;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;

import br.fpf.saude.core.constants.IntegerConstant;

/**
 * TipoAmostra generated by hbm2java.
 */

@SuppressWarnings( "serial" )
@Entity
@Table( name = "tipo_amostra", schema = "laboratorio" )
@SequenceGenerator( name = "idTipoAmostraSequence", sequenceName = "laboratorio.tipo_amostra_id_tipo_amostra_seq" )
public class TipoAmostra implements java.io.Serializable {

    /**
	 * 
	 */
    private Integer idTipoAmostra;

    /**
	 * 
	 */
    private String txTipoAmostra;

    /**
	 * 
	 */
    private Boolean csColetaLocal;

    /**
	 * 
	 */
    private Boolean csAtivo;

    /**
	 * 
	 */
    private String txObservacao;
    
    /**
     * 
     */
    private Short nbSequencia;

    /**
	 * 
	 */
    public TipoAmostra() {
    }

    /***
	 * 
	 */
    private Set<TipoExameRecomendacao> tipoExameRecomendacaos = new HashSet<TipoExameRecomendacao>( 0 );

    /**
     * @param idTipoAmostra
     * @param txTipoAmostra
     * @param csColetaLocal
     * @param csAtivo
     */
    public TipoAmostra( int idTipoAmostra, String txTipoAmostra, Boolean csColetaLocal, Boolean csAtivo ) {
        this.idTipoAmostra = idTipoAmostra;
        this.txTipoAmostra = txTipoAmostra;
        this.csColetaLocal = csColetaLocal;
        this.csAtivo = csAtivo;
    }

    /**
     * @param idTipoAmostra
     * @param txTipoAmostra
     * @param csColetaLocal
     * @param csAtivo
     * @param txObservacao
     */
    public TipoAmostra( int idTipoAmostra, String txTipoAmostra, Boolean csColetaLocal, Boolean csAtivo,
                        String txObservacao ) {
        this.idTipoAmostra = idTipoAmostra;
        this.txTipoAmostra = txTipoAmostra;
        this.csColetaLocal = csColetaLocal;
        this.csAtivo = csAtivo;
        this.txObservacao = txObservacao;
    }

    @Id
    @Column( name = "id_tipo_amostra", unique = true )
    @GeneratedValue( strategy = GenerationType.IDENTITY, generator = "idTipoAmostraSequence" )
//    @NotNull
    public Integer getIdTipoAmostra() {
        return this.idTipoAmostra;
    }

    public void setIdTipoAmostra( Integer idTipoAmostra ) {
        this.idTipoAmostra = idTipoAmostra;
    }

    @Column( name = "tx_tipo_amostra", nullable = false, length = IntegerConstant.CINQUENTA )
//    @NotNull
//    @Length( max = IntegerConstant.CINQUENTA )
    public String getTxTipoAmostra() {
        return this.txTipoAmostra;
    }

    public void setTxTipoAmostra( String txTipoAmostra ) {
        this.txTipoAmostra = txTipoAmostra;
    }

    public void setCsColetaLocal( Boolean csColetaLocal ) {
        this.csColetaLocal = csColetaLocal;
    }

    public void setCsAtivo( Boolean csAtivo ) {
        this.csAtivo = csAtivo;
    }

    @Column( name = "tx_observacao" )
    public String getTxObservacao() {
        return this.txObservacao;
    }

    public void setTxObservacao( String txObservacao ) {
        this.txObservacao = txObservacao;
    }

    @Column( name = "cs_ativo" )
    public Boolean getCsAtivo() {
        return this.csAtivo;
    }

    @Column( name = "cs_coleta_local" )
    public Boolean getCsColetaLocal() {
        return this.csColetaLocal;
    }

    @Cascade( { org.hibernate.annotations.CascadeType.DELETE_ORPHAN, org.hibernate.annotations.CascadeType.SAVE_UPDATE,
            org.hibernate.annotations.CascadeType.MERGE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN } )
    @OneToMany( cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }, 
            fetch = FetchType.LAZY, mappedBy = "tipoExame" )
    public Set<TipoExameRecomendacao> getTipoExameRecomendacaos() {
        return this.tipoExameRecomendacaos;
    }

    public void setTipoExameRecomendacaos( Set<TipoExameRecomendacao> tipoExameRecomendacaos ) {
        this.tipoExameRecomendacaos = tipoExameRecomendacaos;
    }
    
    /**
     * Hash para TipoExameAmostraId .
     * 
     * @return inteiro.
     */
    @Override
    public int hashCode() {
        int result = IntegerConstant.DEZESSETE;

        result = IntegerConstant.TRINTA_SETE * result;
        if ( this.getIdTipoAmostra() != null ) {
        	result += this.getIdTipoAmostra(); 
        }
     
        
        return result;
    }

    /**
     * Método verificador de equivalência.
     * 
     * @return booleano.
     */
    @Override
    public boolean equals( Object obj ) {
        if ( this == obj ) {
            return true;
        }
        if ( obj == null ) {
            return false;
        }
        final TipoAmostra other = (TipoAmostra) obj;

        if ( ( this.idTipoAmostra == null ) && ( other.getIdTipoAmostra() != null ) ) {
            return false;
        }

        if ( ( this.idTipoAmostra != null ) && ( other.getIdTipoAmostra() == null ) ) {
            return false;
        }
        
        if ( this.idTipoAmostra == null && other.getIdTipoAmostra() == null && ( 
                this != other ) ) {
            return false;
        }

        if ( this.idTipoAmostra.intValue() != other.getIdTipoAmostra().intValue() ) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return this.txTipoAmostra;
    }

    @Transient
    public Short getNbSequencia() {
        return nbSequencia;
    }

    
    public void setNbSequencia( Short nbSequencia ) {
        this.nbSequencia = nbSequencia;
    }
    
}
Persistence.xml :
<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
             version="1.0">
             
   <persistence-unit name="iDoctorTest_PU" transaction-type="RESOURCE_LOCAL">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
     
      <!-- POSTGRES
      <properties>
         <property name="hibernate.hbm2ddl.auto" value="validate"/>
         <property name="hibernate.cache.use_query_cache" value="false"/>
         <property name="hibernate.cache.use_second_level_cache" value="false"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="jboss.entity.manager.factory.jndi.name" value="java:/iDoctorTestEntityManagerFactory" />
         <property name="hibernate.connection.password" value="senha"/>
		 <property name="hibernate.connection.username" value="root"/>
		 <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
		 <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/iDoctor"/>
		 <property name="hibernate.connection.provider_class" value="org.hibernate.connection.DriverManagerConnectionProvider"/>
		 <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
      </properties>
     -->
         
             <!-- DERBY DB -->        
         <properties>
       <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
       <property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver"/> 
       <property name="hibernate.connection.url" value="jdbc:derby:memory:iDoctor;create=true"/>  
       <property name="hibernate.connection.username" value=""/>
       <property name="hibernate.connection.password" value=""/>
       <!-- Enable Hibernate's automatic session context management -->
       <property name="current_session_context_class" value="thread"/>
       <!-- JDBC connection pool (use the built-in) -->
       <property name="connection.pool_size" value="5"/>
       <!-- Drop and re-create the database schema on startup -->
       <property name="hbm2ddl.auto" value="create-drop"/>

       <!-- helper debug settings -->
       <property name="hibernate.show_sql" value="true"/>
       <property name="hibernate.format_sql" value="true"/>
       
       <property name="hibernate.cache.use_query_cache" value="false"/>
         <property name="hibernate.cache.use_second_level_cache" value="false"/>
        </properties>
         
      </persistence-unit>
    
</persistence>

Excessão Gerada :

Caused by: org.hibernate.exception.SQLGrammarException: could not insert: [br.fpf.laboratorio.entitybean.TipoAmostra] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:40) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49) at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131) at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87) at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38) at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618) at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592) at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596) at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:213) ... 30 more Caused by: java.sql.SQLSyntaxErrorException: O esquema 'LABORATORIO' não existe at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source) at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source) at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.(Unknown Source) at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.(Unknown Source) at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.(Unknown Source) at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.(Unknown Source) at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source) at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94) at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:30)

Muito Obrigado.

Nykolas_Lima

mateus.said:
Boa tarde Galera,

Estou com o mesmo problema, estou utilizando o banco de dados Derby (em memória), e ao que me parece o hibernate não está conseguindo gerar a minha estrutura de banco de dados, que é composta por (schema.tabela), sendo que possuo diversos Schemas em todo o Banco de dados. No Sistema Utilizamos o Postgresql, porém estamos adotando a técnica do TDD (Test Driven Development), e para agilizar este processo optamos por utilizar um banco em memória (HSQLDB ou DERBY). Porém não estamos conseguindo da continuidade, devido a esse problema, vou postar o código de mapeamento da classe, o persistence.xml e a excessão gerada.
Se alguém souber ou puder ajudar, agradeço. :smiley:


Olá,

Na anotação da tabela TipoAmostra você usa o seguinte código:

@Table( name = "tipo_amostra", schema = "laboratorio" )

O erro esta ocorrendo porque não foi encontrado o schema laboratorio na sua base de dados.

O schema laboratorio existe na sua base de dados?

A sua tabela “tipo_amostra” não esta no schema “iDoctor”? Se sim, você não precisa utilizar o atributo “schema=laboratorio” na anotação @Table.
Experimente tirar o “shema=laboratorio” para ver se funciona.

M

Bom dia Nikolas,
Primeiramente obrigado pela resposta. :smiley:

Deixa eu explicar situação p vc entender. nós ja temos um sistema rodando, utilizando as seguintes tecnologias: JBoss + Hibernate + JSF. Esse Sistema utiliza a base de dados do PostgreSql, e por ser um sistema bastante grande e até mesmo para organização, a estrutura de banco de dados, foi organizada em schemas. Na base temos em torno de uns 13 a 14 schemas e dentro de cada schema desse, temos as tabelas. (schema.tabela).
Porém surgiu a necessidade de fazermos testes unitários, e rodadndo esses testes no postgreSql fica muito lento o processo, optamos por escolher o DERBY db (em memória) especificamente para esses testes. Porém na hora de gerar a base de dados via Hibernate (persistence.xml) (), ocorre um erro, pois o hibernate cria primeiro as tabelas e depois tenta criar os schemas, mesmo as classes estando devidamente anotadas @Table( name = “tipo_amostra”, schema = “laboratorio” ). OBS: Isso ocorre para a geração do banco no DERBYDB em memória. A partir dessa anotation deveria ser gerada a tabela da seguinte forma: laboratorio.tipo_amostra .

OBS: Também ja tentamos utilizar o HSQL DB, mas o mesmo problema ocorre.

Será se haveria uma forma de forçar o hibernate a criar primeiro os schemas, para ai sim gerar as tabelas?
Ou há alguma forma de criar esses schemas de forma manual, diretamente no persistence.xml?

Muito Obrigado.

M

Bom dia PEssoal. :smiley:

Alguma Dica???

Valeu :wink:

Criado 23 de dezembro de 2010
Ultima resposta 28 de jan. de 2011
Respostas 8
Participantes 4