Criei minha dúvida no GIST: https://gist.github.com/DanFonseca/8f4aa80d02d9ac013929b54167c82980
Poderiam me ajudar?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Criei minha dúvida no GIST: https://gist.github.com/DanFonseca/8f4aa80d02d9ac013929b54167c82980
Poderiam me ajudar?
Amigo, parece que as classes não estão todas mapeadas. Notei que o nome do pacote está br.com.lcasadocodigo.loja.conf, esse L faz parte do pacote mesmo?
Posta a classe de configuração da JPA pra gente dar uma olhada. Abraço
Olá, Thiago, tudo bem?
Segue a classe de configuração JPA
package br.com.lcasadocodigo.loja.conf;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.persistence.EntityManagerFactory;
import java.util.Properties;
@EnableTransactionManagement
public class JPAConfiguration {
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory (){
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
factoryBean.setJpaVendorAdapter(vendorAdapter);
DriverManagerDataSource dataSource =new DriverManagerDataSource();
dataSource.setUsername("root");
dataSource.setPassword("root");
dataSource.setUrl("jdbc:mysql://localhost:3306/casadocodigo?useTimezone=true&serverTimezone=UTC");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
factoryBean.setJtaDataSource(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.lcasadocodigo.loja.DAO");
return factoryBean;
}
@Bean
public JpaTransactionManager transactionManager (EntityManagerFactory emf){
System.out.println("aaaaaaa");
return new JpaTransactionManager(emf);
}
}Estou mapeando a classe JPAConfiguration na servletSpringMVC
public class ServletSpringMVC extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
System.out.println("iniciando getRootConfigClasses");
return new Class[0];
}
@Override
protected Class<?>[] getServletConfigClasses() {
System.out.println("iniciando getServletConfigClasses");
return new Class[] {AppWebConfiguration.class, JPAConfiguration.class};
}
//Este método informa qual URL o Spring deve mapear
@Override
protected String[] getServletMappings() {
System.out.println("iniciando getServletMappings");
return new String [] {"/"};
}
}
Segue também a classe appWebConfiguration e a DAO.
package br.com.lcasadocodigo.loja.conf;
import br.com.lcasadocodigo.loja.DAO.ProdutoDAO;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import br.com.lcasadocodigo.loja.controllers.*;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@EnableWebMvc
@ComponentScan(basePackageClasses = {PagesController.class, ProdutoDAO.class})
public class AppWebConfiguration {
@Bean
public InternalResourceViewResolver internalResourceViewResolver (){
System.out.println("iniciando view");
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}DAO
package br.com.lcasadocodigo.loja.DAO;
import br.com.lcasadocodigo.loja.models.Produto;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Repository
@Transactional
public class ProdutoDAO {
//Criando um gerenciado de entidade
@PersistenceContext
private EntityManager manager;
public void gravar (Produto produto){
manager.persist(produto);
}
}
Esse erro "NoJtaPlatform" indica que você não configurou seu hibernate.transaction.jta.platform corretamente. No Spring Boot, isso deve ser definido pelo JPAConfiguration.
Seu erro foi utilizar:
factoryBean.setJtaDataSource(dataSource);o correto é:
factoryBean.setDataSource(dataSource);Abraço!
Muito obrigado!!!