Configurando Spring/JPA com anotações

4 respostas
jpaspringhibernate
P

Pessoal, estou desenvolvendo meu primeiro projeto web maven e estou tendo muita dificuldade com a parte de configuração do spring + jpa. Estou utilizando arquivos de configuração por anotações, quando inicializo o server parece estar tudo certo, mas quando tento adicionar algo usando “entityManager.persist” da erro. Se alguem com mais experiencia conseguir identificar onde ta o erro agradeço mt, tbm aceito sugestões de artigos que ajudem nessa parte de configuração do projeto.

Essa é a arvore do projeto:

Classes de Configuração:



Model:

DAO:

Controller:

GRAVE: Servlet.service() for servlet [SpringMVC] in context with path [/eCommerce] threw exception [Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection] with root cause

java.lang.NullPointerException

at com.mysql.jdbc.ConnectionImpl.getServerCharacterEncoding(ConnectionImpl.java:3309)

at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1985)

at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1911)

at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1288)

at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2508)

at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2541)

at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2323)

at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:832)

at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:46)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

at java.lang.reflect.Constructor.newInstance(Unknown Source)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)

at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417)

at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153)

at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144)

at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155)

at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:120)

at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139)

at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380)

at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228)

at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171)

at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67)

at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:162)

at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1435)

at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:61)

at org.springframework.orm.jpa.DefaultJpaDialect.beginTransaction(DefaultJpaDialect.java:67)

at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:110)

at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:380)

at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373)

at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:420)

at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:257)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)

at com.sun.proxy.$Proxy32.addProduct(Unknown Source)

at com.pedro.ecommerce.controller.ProductsControll.addProduct(ProductsControll.java:23)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)

at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)

at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)

at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)

at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)

at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Unknown Source)

4 Respostas

D

Como você esta começando te recomendo fortemente a utilizar o spring boot, e so acessar o site https://start.spring.io/, escolher o tipo de projeto e fazer download ja funcionando, agora se quiser continuar a configurar com anotations da uma neste meu repositorio, que ja tem um projeto configurado deste tipo, https://github.com/edulemos/projeto-padrao-spring

P

Muito obrigado pela sugestão e pelo projeto, vou dar uma olhada, vlw msm. Agr acho q exatamente por estar começando vou tentar usar as anotações msm, nao gosto da sensação de usar um framework pra fazer algo por mim sem q eu nao saiba fazer sem ele, antes de ver o spring e o hibernate como to vendo agr fiz varias servlets na mão msm, lidando com request e response, e por mais q tenha sido mt mais complicado me ajudou a entender mt coisa, acho isso importante.

P

Man, tava dando uma olhada no projeto q vc passou e achei algumas partes q nao to entendendo mt bem oq fazem, se puder me ajudar a entender agradeço.

na classe “SpringDataConfig” vc usa as anotações @Configuration, @EnableTransactionManagement, @PropertySource, essas três eu consigo entender oq fazem, agr pra q serve essa “@EnableJpaRepositories(basePackageClasses)” dei uma olhada na classe UserRepository e nao consegui entender oq ela faz nem o pq de vc passar ela como parametro nessa anotação.

Outra coisa, esse atributo “Environment” q vc usou, ele é feito pra passar as informações de um arquivo de propriedades para classe certo? porém como estou apenas testando o funcionamento basico gostaria de setar essas propriedades manualmente dessa forma aqui:

tem algum problema fazer assim apenas para testes ?

D

A anotação EnableJpaRepositories e porque uso o spring data neste exemplo, a clase passada como parâmetro e só para o spring ter uma referencia em qual diretório esta os repositórios do spring data, sobre o Environment esta correto, pode passar direto não tem problema.

Criado 23 de julho de 2018
Ultima resposta 24 de jul. de 2018
Respostas 4
Participantes 2