[RESOLVIDO] - JPA não Insere Entity no Banco

Estou tendo um “erro” estranho, quando tento inserir uma entity no banco não acontece nada, nem exception é gerada.

Seguem os meus arquivos.

Parte da DAO:

public void save(RegraCampanha regraCampanha) { this.entityManager.persist(regraCampanha); System.out.println("Inserido"); }

Mapeamento:

[code]@Entity
@Table(name = “regra_campanha”)
@NamedQueries({
@NamedQuery(name = “consultarTodasRegras”, query = “select r from RegraCampanha r”),
@NamedQuery(name = “consultarRegraPorCampanha”, query = “select r from RegraCampanha r where r.codigoCampanha = :codigoCampanha”)
})
public class RegraCampanha implements Serializable{

@Id
@Column(name = "id_regra_campanha")
@TableGenerator(allocationSize = 1, name = "regraGenerator", initialValue = 1)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "regraGenerator")
private Long id;
@Column(name = "descricao")
private String descricao;
@Column(name = "codigo_campanha")
private String codigoCampanha;}[/code]

O System.out.println(“Inserido”) é “printado” no console :shock:

Tenho outros métodos que são de consulta e funcionam perfeitamente.

Desde já agradeço a ajuda.

Você está usando Hibernate? Coloca seu persistence.xml.

Outra coisa, como você está gerenciando as transações?

Sim, estou usando o hibernate.

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.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_1_0.xsd"> <persistence-unit name="CentralAtendimentoMosaicoPU" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/TeradataDS</jta-data-source> <class>br.com.druid.centraldeatendimento.model.Cliente</class> <class>br.com.druid.centraldeatendimento.model.TipoPortador</class> <class>br.com.druid.centraldeatendimento.model.Campanha</class> <class>br.com.druid.centraldeatendimento.model.ConsultaCampanhaCartao</class> <class>br.com.druid.centraldeatendimento.model.ClientePerfil</class> <class>br.com.druid.centraldeatendimento.model.ConsultaCampanhaCPF</class> <class>br.com.druid.centraldeatendimento.model.FormatoCampanha</class> <class>br.com.druid.centraldeatendimento.model.CadastroClienteCampanha</class> <class>br.com.druid.centraldeatendimento.model.ConsultaDadoCliente</class> <class>br.com.druid.centraldeatendimento.model.RegraCampanha</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.TeradataDialect"/> <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/> <property name="hibernate.show_sql" value="true"/> </properties> </persistence-unit> </persistence>

Quem gerencia as transações é o spring.

applicationContexto.xml:[code]





<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven/>[/code]

Só uma correção.

O mapeamento do meu ID está assim:

@Id @Column(name = "id_regra_campanha") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

O que eu postei antes foi um teste que eu estava fazendo.

voce não esta esquecendo de comitar a transacao ? ou fazendo roolback por engano no final ?

O teu show_sql tá imprimindo o INSERT ?

tenta colocar um:

this.entityManager.flush();

Depois do teu persist.

Essa query ele não imprime e quando eu coloco o flush dá erro.

E cadê o erro?

Estava simulando ele novamente, como já tinha testado isso já sabia que dava erro… :oops:

[code]
09:53:47,066 ERROR [STDERR] javax.persistence.TransactionRequiredException: no transaction is in progress

09:53:47,067 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:792)

09:53:47,067 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

09:53:47,067 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

09:53:47,067 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

09:53:47,067 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:601)

09:53:47,067 ERROR [STDERR] at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)

09:53:47,068 ERROR [STDERR] at $Proxy320.flush(Unknown Source)

09:53:47,068 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

09:53:47,068 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

09:53:47,068 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

09:53:47,068 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:601)

09:53:47,068 ERROR [STDERR] at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)

09:53:47,068 ERROR [STDERR] at $Proxy320.flush(Unknown Source)

09:53:47,068 ERROR [STDERR] at br.com.druid.centraldeatendimento.dao.RegraCampanhaDAO.save(RegraCampanhaDAO.java:24)

09:53:47,069 ERROR [STDERR] at br.com.druid.centraldeatendimento.endpoint.CampanhaEndpoint.incluirRegraCampanha(CampanhaEndpoint.java:42)

09:53:47,069 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

09:53:47,069 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

09:53:47,069 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

09:53:47,069 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:601)

09:53:47,069 ERROR [STDERR] at org.springframework.ws.server.endpoint.MethodEndpoint.invoke(MethodEndpoint.java:132)

09:53:47,069 ERROR [STDERR] at org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter.invokeInternal(DefaultMethodEndpointAdapter.java:229)

09:53:47,069 ERROR [STDERR] at org.springframework.ws.server.endpoint.adapter.AbstractMethodEndpointAdapter.invoke(AbstractMethodEndpointAdapter.java:53)

09:53:47,069 ERROR [STDERR] at org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:233)

09:53:47,070 ERROR [STDERR] at org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:173)

09:53:47,070 ERROR [STDERR] at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:88)

09:53:47,070 ERROR [STDERR] at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:59)

09:53:47,070 ERROR [STDERR] at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:221)

09:53:47,070 ERROR [STDERR] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)

09:53:47,070 ERROR [STDERR] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)

09:53:47,070 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)

09:53:47,070 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

09:53:47,070 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324)

09:53:47,071 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242)

09:53:47,071 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)

09:53:47,086 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)

09:53:47,086 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181)

09:53:47,086 ERROR [STDERR] at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285)

09:53:47,086 ERROR [STDERR] at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261)

09:53:47,086 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88)

09:53:47,086 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100)

09:53:47,087 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:159)

09:53:47,087 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

09:53:47,087 ERROR [STDERR] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)

09:53:47,087 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

09:53:47,087 ERROR [STDERR] at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53)

09:53:47,087 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362)

09:53:47,087 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)

09:53:47,087 ERROR [STDERR] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654)

09:53:47,087 ERROR [STDERR] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951)

09:53:47,088 ERROR [STDERR] at java.lang.Thread.run(Thread.java:722)[/code]

Segundo a linha:

javax.persistence.TransactionRequiredException: no transaction is in progress

Você está sem transação, logo, não consegue inserir.

Nunca usei o Spring, mas sei que tem uma anotação @Transacional que coloca na classe que você usa (eu acho).

Se não for esse caso da anotação, tenta usar um:

public void save(RegraCampanha regraCampanha) {  
       this.entityManager.getTransaction().begin();
       this.entityManager.persist(regraCampanha);
       this.entityManager.getTransaction().commit();
       System.out.println("Inserido");  
} 

Acho que é isso.

[quote=diegosantiviago]Segundo a linha:

javax.persistence.TransactionRequiredException: no transaction is in progress

Você está sem transação, logo, não consegue inserir.

Nunca usei o Spring, mas sei que tem uma anotação @Transacional que coloca na classe que você usa (eu acho).

Se não for esse caso da anotação, tenta usar um:

public void save(RegraCampanha regraCampanha) {  
       this.entityManager.getTransaction().begin();
       this.entityManager.persist(regraCampanha);
       this.entityManager.getTransaction().commit();
       System.out.println("Inserido");  
} 

Acho que é isso.[/quote]

é provável que esteja apenas faltando a anotação do spring no método que necessita de transação;

Era para o Spring gerenciar essa parte de abertura e fachamento da transação.

Coloquei a sua dica no código e acabou dando este erro:

[code]
10:00:34,168 ERROR [STDERR] java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead

10:00:34,170 ERROR [STDERR] at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:198)

10:00:34,170 ERROR [STDERR] at $Proxy402.getTransaction(Unknown Source)

10:00:34,170 ERROR [STDERR] at br.com.druid.centraldeatendimento.dao.RegraCampanhaDAO.save(RegraCampanhaDAO.java:21)

10:00:34,170 ERROR [STDERR] at br.com.druid.centraldeatendimento.endpoint.CampanhaEndpoint.incluirRegraCampanha(CampanhaEndpoint.java:42)

10:00:34,170 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

10:00:34,170 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

10:00:34,170 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

10:00:34,170 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:601)

10:00:34,171 ERROR [STDERR] at org.springframework.ws.server.endpoint.MethodEndpoint.invoke(MethodEndpoint.java:132)[/code]

É isso aí…

Sua classe tem o @Transactional ? Acho que não pode ter @Service e @Transaction junto.

Coloquei o @Transactional e deu este erro:

faz o seguinte coloque @Transactional em cima método que faz o persist

1 curtida

Se você coloca o @Transaction tem que tirar o .getTransaction().begin() e commit() !

1 curtida

Eu tirei, olha como está agora:

@Transactional public void save(RegraCampanha regraCampanha) { this.entityManager.persist(regraCampanha); System.out.println("Inserido"); }

1 curtida

Tá … Funcionou?

Coloca o .flush() porquê se der erro já vai estourar na hora e não ao final da transação.

continua o erro cole o log ai

Tinha colado no outro post, enfim, segue o erro completo:

[code]
10:13:31,802 ERROR [STDERR] org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.IllegalStateException: A JTA EntityManager cannot use getTransaction()

10:13:31,803 ERROR [STDERR] at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:427)

10:13:31,803 ERROR [STDERR] at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)

10:13:31,803 ERROR [STDERR] at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335)

10:13:31,803 ERROR [STDERR] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105)

10:13:31,804 ERROR [STDERR] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

10:13:31,804 ERROR [STDERR] at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)

10:13:31,804 ERROR [STDERR] at br.com.druid.centraldeatendimento.dao.RegraCampanhaDAO$$EnhancerByCGLIB$$455174b2.save()

10:13:31,804 ERROR [STDERR] at br.com.druid.centraldeatendimento.endpoint.CampanhaEndpoint.incluirRegraCampanha(CampanhaEndpoint.java:42)

10:13:31,804 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

10:13:31,804 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

10:13:31,804 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

10:13:31,805 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:601)

10:13:31,805 ERROR [STDERR] at org.springframework.ws.server.endpoint.MethodEndpoint.invoke(MethodEndpoint.java:132)

10:13:31,805 ERROR [STDERR] at org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter.invokeInternal(DefaultMethodEndpointAdapter.java:229)

10:13:31,805 ERROR [STDERR] at org.springframework.ws.server.endpoint.adapter.AbstractMethodEndpointAdapter.invoke(AbstractMethodEndpointAdapter.java:53)

10:13:31,805 ERROR [STDERR] at org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:233)

10:13:31,805 ERROR [STDERR] at org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:173)

10:13:31,806 ERROR [STDERR] at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:88)

10:13:31,806 ERROR [STDERR] at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:59)

10:13:31,806 ERROR [STDERR] at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:221)

10:13:31,806 ERROR [STDERR] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)

10:13:31,806 ERROR [STDERR] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)

10:13:31,806 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)

10:13:31,806 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

10:13:31,807 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324)

10:13:31,807 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242)

10:13:31,807 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)

10:13:31,807 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)

10:13:31,807 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181)

10:13:31,807 ERROR [STDERR] at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285)

10:13:31,808 ERROR [STDERR] at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261)

10:13:31,808 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88)

10:13:31,808 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100)

10:13:31,808 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:159)

10:13:31,808 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

10:13:31,808 ERROR [STDERR] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)

10:13:31,809 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

10:13:31,809 ERROR [STDERR] at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53)

10:13:31,809 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362)

10:13:31,809 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)

10:13:31,809 ERROR [STDERR] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654)

10:13:31,809 ERROR [STDERR] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951)

10:13:31,810 ERROR [STDERR] at java.lang.Thread.run(Thread.java:722)

10:13:31,810 ERROR [STDERR] Caused by: java.lang.IllegalStateException: A JTA EntityManager cannot use getTransaction()

10:13:31,810 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.getTransaction(AbstractEntityManagerImpl.java:818)

10:13:31,811 ERROR [STDERR] at org.springframework.orm.jpa.DefaultJpaDialect.beginTransaction(DefaultJpaDialect.java:70)

10:13:31,811 ERROR [STDERR] at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:59)

10:13:31,811 ERROR [STDERR] at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:377)

10:13:31,811 ERROR [STDERR] … 42 more[/code]