Erro cruel! Hibernate (JPA) + Spring

9 respostas
J

pessoal to utilizando hibernate com JPA integrado com Spring....
está rodando normal, consigo incluir, deletar, consultar...etc... ATÉ QUE....

eu fui fazer os mapeamentos das minhas classes com relacionamentos @[email removido] necessários....e ai NADA....sequer compilou...e da gerando uma excessão....

como estou utilizando com Spring......não tenho nenhum xml do hibernate.....e estava rodando Perfeito...até que os mapeamentos bagunçou TUDO...

vejam meu application-xml do SPRING (Parte dele, o resto do xml basicamente é conexão com o banco):
<!-- JPA EntityManagerFactory -->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true"/>
                <property name="generateDdl" value="false"/>
                <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
            </bean>
        </property>
    </bean>
    
    <!-- Transaction manager para um JPA EntityManagerFactory simples (alternativa ao JTA) -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>
    <!-- Instrui o Spring a realizar gerenciamento transacional declarativo automático nas classes anotadas.-->
    <tx:annotation-driven/>
    
    <!-- PostProcessors para realizar injeção de recursos de acordo com a especificação JPA (@PersistenceContext, @PersistenceUnit). -->
    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
    
    <!-- PostProcessors para realizar a conversão de exceções nas classes @Repository (das exceções nativas como JPA PersistenceExceptions to Spring's DataAccessException). -->
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
    
    <!-- Será automaticamente transacional graças ao @Transactional. EntityManager irá ser auto-injetado graças ao @PersistenceContext. PersistenceExceptions irá ser auto-convertido graças ao @Repository. -->
    <bean id="pessoa" class="com.virtual.Model.Pessoa" />
    
    <bean id="pessoaDao" class="com.virtual.Dao.PessoaDao" />
    
    <bean id="pessoaFacade" class="com.virtual.Facade.PessoaFacade">
        <property name="pessoaDao" ref="pessoaDao" />
    </bean>
aqui um pequeno trecho de uma classe DAO...
@PersistenceContext
	private EntityManager em;
	

  public Pessoa gravar(Pessoa pessoa) throws DataAccessException {
        return em.merge(pessoa);
    }
	
    public void excluir(Pessoa pessoa) throws DataAccessException {
        em.remove(carregar(pessoa.getCodigo()));
    }
aqui um trecho das minhas associações....e DEPOIS que inseri elas, não rodou mais....
/**Mapeamento Muitos para Um com a Entity Grupo */
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="codigo", 	insertable=true, updatable=true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Grupo grupo = new Grupo();
    
    /**Mapeamento Um para Um com a Entity Cliente */
    @OneToOne(mappedBy="pessoa")
    @Cascade(CascadeType.ALL)
    private Cliente cliente = new Cliente();
e a excessão gerada:
Null Test: 	Caused an ERROR
null
java.lang.reflect.InvocationTargetException
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:451)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:733)
	at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:496)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:337)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:122)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:66)
	at com.virtual.Facade.PessoaFacadeTest.<init>(PessoaFacadeTest.java:24)
	at com.virtual.Facade.VirtualTestSuite.suite(VirtualTestSuite.java:33)
	... 7 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1170)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:248)
	at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:257)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:122)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.<init>(PersistenceExceptionTranslationInterceptor.java:78)
	at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.<init>(PersistenceExceptionTranslationAdvisor.java:70)
	at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:96)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1158)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)
	... 18 more
Caused by: java.lang.NullPointerException
	at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:135)
	at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1130)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:316)
	at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1115)
	at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1269)
	at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:150)
	at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:888)
	at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:416)
	at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:126)
	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:218)
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:251)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1198)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1167)
	... 31 more

detalhe...estou usando JUnit ainda pra realizar os testes, não há classe web, somente teste ainda...

se alguém souber e puder ajudar...
Seria por acaso necessário criar o hibernate.cfg.xml (até então não precisei dele e rodou normal...)

9 Respostas

B

Ola colega.

Estou com O MESMO problema que você.
Comecei a estudar Spring e Hibernate. Comprei um livro com um exemplo e queria fazer uns testes.
Bem, segui o tutorial recomendato cheguei ao seguinte arquivo applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    
    
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
          p:location="jdbc.properties" />

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close"
          p:driverClassName="org.postgresql.Driver"
          p:url="jdbc:postgre://localhost/meuDB"
          p:username="admin"
          p:password="adminadmin" />


 <!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) -->

    <!-- JPA EntityManagerFactory -->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true"/>
                <property name="generateDdl" value="false"/>
                <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
            </bean>
        </property>
    </bean>
<!--
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="dataSource" ref="dataSource" />
        <property name="JpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true" />
                <property name="generateDdl" value="false" />
                <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
            </bean>
        </property>
    </bean>

-->

    <!-- Transaction manager para um JPA EntityManagerFactory simples )alternativa ao JTA) -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <!-- Intrui o Spring para realizar o gerenciamento transacional declarativo automático nas classes anotadas -->
    <tx:annotation-driven/>
    <!-- PostProcessors para realizar a injação de recursos de acordo com a especificação JPA (@PersistenceContex, @PersistenceUnit ) -->
    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
    <!-- PostProcessors para realizar a conversação de exceções nas classes @Repository
    (das exceções naticas como JPA PersistenceExceptions to Spring's DataAcessException). -->
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
    <!--
        Será automaticamente transacional graças ao @Transactional.
        EntetyManager irá ser auto-inetado graças ao @persistenceContext.
        PersistenceExceptions irá ser auto convertido graças ao @Repository
    -->



    <!--


    -->
    <!-- Contato -->
    <bean id="contato" class="Persistencia.Entidade.Contato" scope="session" />
    <bean id="contatoDAO" class="Persistencia.DAO.ContatoDAO" />
    <bean id="contatoFacade" class="Persistencia.Facade.ContatoFacade">
        <property name="contatoDAO" ref="contatoDAO" />
    </bean>
    <!-- Uf -->
    <bean id="uf" class="Persistencia.Entidade.Uf" scope="session" />
    <bean id="ufDAO" class="Persistencia.DAO.UfDAO" />
    <bean id="ufFacade" class="Persistencia.Facade.UfFacade">
        <property name="ufDAO" ref="ufDAO" />
    </bean>
</beans>

Esta dando o seguinte erro:

Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml}

Mas se eu remover a linha
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

Da o seguinte erro:

Error creating bean with name 'dataSource' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.config.internalTransactionAdvisor': Cannot create inner bean '(inner bean)' of type [org.springframework.transaction.interceptor.TransactionInterceptor] while setting bean property 'transactionInterceptor'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)': Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'entityManagerFactory' while setting bean property 'entityManagerFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml}

Acredito que seja aqui:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close"
          p:driverClassName="org.postgresql.Driver"
          p:url="jdbc:postgre://localhost/MeuDB"
          p:username="admin"
          p:password="adminadmin" />

Repare pelo comentario da linha 36 que substitui (na linha 26) o mesmo objeto que você esta utilizando, mas continua dando erro.

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
pelo mesmo que você esta utilizando:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
Se alguem tiver uma sugestão ou se você conseguir resolver o problema posta ai!

Vlw

F

Olá pessoal,

Acabei de ter exatamente o mesmo problema em uma migração de aplicação que usava uma base MySQL para, agora, PostgreSQL. Já conseguiram resolver?

Grato,

Fabiano Franz
http://fabianofranz.com

L

Cara, so uma pergunta, vocês criaram o persistence.xml na pasta META-INF no classpath do teu projeto, eu tava com o mesmo problema, ai criei o arquivo e resolvi, sei que parece uma pergunta meio obvia, mas nao custa perguntar no intuito de ajudar

F

Sim!

E

Olá!!
Estou com o mesmo problema. Alguém conseguiu resolver??

J

Alguem conseguiu resolver esse problema, pois estou fazendo meu TCC sobre Spring, Hibernate e JSF e esta dando esse mesmo erro.

Alguem pode me ajudar???

J

Estive com o mesmo problema e foi resolvido colocando um asteriscodepois de “classpath:” como mostrado
no trecho abaixo. No web.xml

Arquivo Principal do Spring contextConfigLocation classpath:*/recursos/applicationContext.xml

Força a todos.

T

Iae pessoal...Sou novo no forum....Baixei um projeto do svn da empresa....

Soh que quando vou rodar no jboss ele da uns erros que nem tenho noção de como tirar....

Segue...Obrigado...

failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emailCorp' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.mapfre.ClientEmailCorp]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sistemaDao' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'jdbcTemplateCicas' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplateCicas' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'dataSourceCicas' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceCicas' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: jdbc not bound
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:883)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)

Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.mapfre.ClientEmailCorp]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sistemaDao' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'jdbcTemplateCicas' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplateCicas' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'dataSourceCicas' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceCicas' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: jdbc not bound
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:115)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)
	... 151 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sistemaDao' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'jdbcTemplateCicas' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplateCicas' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'dataSourceCicas' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceCicas' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: jdbc not bound
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	at java.security.AccessController.doPrivileged(Native Method)
T

Havia começado um projeto do zero e nunca havia reparado uma coisa que acabou resolvendo um problema igual ao que estão passando.
Na pasta src criei uma pasta chamada META-INF e coloquei o persistence.xml lá. Não sei se é o metodo correto porem resolveu o meu problema. Preciso pesquisar para saber se esse é o metodo correto para usar isso.

Criado 16 de dezembro de 2007
Ultima resposta 11 de mai. de 2012
Respostas 9
Participantes 9