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

No transactional EntityManager available

Estou recebendo essa exception

HTTP Status 500 - Request processing failed; nested exception is javax.persistence.TransactionRequiredException: No transactional EntityManager available

root cause
javax.persistence.TransactionRequiredException: No transactional EntityManager available

Segue meu ProdutoDao:

package br.com.casadocodigo.loja.daos;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;

import br.com.casadocodigo.loja.models.Produto;

@Repository
public class ProdutoDao {

    @PersistenceContext
    private EntityManager manager;

    public void gravar(Produto produto) {
        manager.persist(produto);
        System.out.println("Gravando " + produto);
    }
}

As notações no meu AppWebConfiguration aparentemente está ok:"

@EnableWebMvc
@ComponentScan(basePackageClasses = { HomeController.class, ProdutoDao.class })

E no meu ServletSpringMVC também:

@Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] {AppWebConfiguration.class, JPAConfiguration.class};
    }
4 respostas

Opa! E aí, tudo certinho? =D

Você poderia postar aqui o código do seu JPAConfiguration, por favor? Acredito que o erro possa estar nessa classe. =)

Fábio

Fala Fábio. Tudo jóia. Muito obrigado, segue o código.

package br.com.casadocodigo.loja.conf;

import java.util.Properties;

import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;

public class JPAConfiguration {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();

        JpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();

        factoryBean.setJpaVendorAdapter(jpaVendorAdapter );

        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUsername("root");
        dataSource.setPassword("");
        dataSource.setUrl("jdbc:mysql://localhost:3306/casadocodigo");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");

        factoryBean.setDataSource(dataSource);

        Properties props = new Properties();
        props.setProperty("hibernate.dialect" , "org.hibernate.dialect.MySQL5Dialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("hibernate.hbm2ddl.auto", "update");

        factoryBean.setJpaProperties(props);

        factoryBean.setPackagesToScan("br.com.casadocodigo.loja.models");

        return factoryBean;

    }
}
solução!

Opa! Legal...

Qual atividade de qual aula você estava tentando fazer quando recebeu esse erro? Pergunto isso, pois parece que está faltando o controle de transações nessa classe, que é a última atividade da aula 2, se não me engano...

Primeiramente, você precisa adicionar a anotação @EnableTransactionManagement nessa classe, assim:

@EnableTransactionManagement
public class JPAConfiguration {
  // Método entityManagerFactory...
}

Em seguida, você precisa adicionar um novo método, para o controle de transações, propriamente dito:

@EnableTransactionManagement
public class JPAConfiguration {
  // Método entityManagerFactory...

  public JpaTransactionManager transactionManager (EntityManagerFactory emf) {
    return new JpaTransactionManager(emf);
  }
}

Feito isso, acredito que estará tudo configurado corretamente... Pode testar e nos dar um feedback, por favor? =)

Obs: Sem querer marquei sua última resposta como solução, mas vamos conversando aqui até realmente termos a solução, beleza?

Obs²: Quando for inserir um código aqui, procure pelo botão Inserir código, assim facilita a formatação e leitura, ok? =)

Abraço e bons estudos,

Fábio

Bom dia Fábio. Muito obrigado pela resposta.

Hoje pela manhã eu consegui resolver com essa mesma solução que me passou.

Valeu