JPA - @OneToMany - java.sql.BatchUpdateException: ORA-01400: cannot insert NULL

3 respostas
B

Bom dia Galera,

Gostaria da ajuda de vcs para um problema que esta acontendo, estou tentando inserir utilizando JPA para isso uma nova entidade com nome SolicitacaoGrupoComunicacao na qual pertence a uma solicitação. O programa roda normalmente inserindo as entidades, mas na hora de executar o comando entityManager.flush(); ele apresenta o seguinte erro.
SEVERE: Received 'javax.persistence.PersistenceException' when invoking action listener '#{solicitarBean.insertSolicitacao}' for component 'cmdSaveSolicitacao'
12/04/2013 07:35:56 javax.faces.event.MethodExpressionActionListener processAction
SEVERE: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1215)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1148)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1154)
	at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:798)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)
	at $Proxy30.flush(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
	at $Proxy30.flush(Unknown Source)
	at br.com.unimed.central.service.impl.AbstractCrudService.liberaTransacao(AbstractCrudService.java:148)
	at br.com.unimed.central.service.impl.SolicitacaoServiceImpl.insereHistoricoMarcacao(SolicitacaoServiceImpl.java:1290)
	at br.com.unimed.central.service.impl.SolicitacaoServiceImpl.insereSolicitacao(SolicitacaoServiceImpl.java:163)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
	at $Proxy42.insereSolicitacao(Unknown Source)
	at br.com.unimed.central.web.SolicitarBean.insertSolicitacao(SolicitarBean.java:413)
	at br.com.unimed.central.web.SolicitarBean.insertSolicitacao(SolicitarBean.java:672)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:152)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:99)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at org.apache.myfaces.trinidad.component.UIXComponentBase.broadcast(UIXComponentBase.java:748)
	at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:179)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:359)
	at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
	at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:116)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:172)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:268)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at br.com.unimed.central.seguranca.FiltroAutenticacao.doFilterHttp(FiltroAutenticacao.java:98)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:87)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:61)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:271)
	at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:177)
	at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
	at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114)
	at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
	at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
	at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1179)
	at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:188)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
	at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:795)
	... 107 more
Caused by: java.sql.BatchUpdateException: ORA-01400: cannot insert NULL into ("CLUF"."CLUF_SOL_GRUPO_ACIONADO"."CD_SOL_GRP_ACIONADO")

	at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
	at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10656)
	at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	... 119 more

O grande problema que ele esta acusando de o campo CD_SOL_GRP_ACIONADO esta sendo passado NULL, mas ja debugei e vi que os valores então todos sendo passados de forma correta:
Minhas classes estão mapeadas dessa forma, teria como alguem me dizer aonde estou cometendo o erro

class Solicitacao

@Entity(name = "Solicitacao")
@Table(name = "CLUF_SOLICITACAO", schema = "CLUF")
public class Solicitacao implements Serializable{

	
	@Id
	@Column(name = "CD_SOLICITACAO", length = 15, nullable = false)	
	private Integer codigo;
              
                @OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
	@Fetch(FetchMode.SUBSELECT)
	@JoinTable(name = "CLUF_SOL_GRUPO_ACIONADO", schema="CLUF" , 
			joinColumns = @JoinColumn(name = "CD_SOLICITACAO",updatable=false),
			inverseJoinColumns = @JoinColumn(name = "CD_GRUPO"))
	private List<SolicitacaoGrupoComunicacao> solicitacaoGrupoComunicacao;
}
class SolicitacaoGrupoComunicacao
@Entity(name = "SolicitacaoGrupoComunicacao")
@Table(name = "CLUF_SOL_GRUPO_ACIONADO", schema = "CLUF")
@SequenceGenerator(name = "solGrpAcionadoSeq",sequenceName="CLUF.CLUF_SOL_GRP_ACIONADO_SEQ",allocationSize=1)
public class SolicitacaoGrupoComunicacao implements Serializable {
	
	@Id
	@Column(name = "CD_SOL_GRP_ACIONADO", length = 15, nullable = false)
	@GeneratedValue(generator = "solGrpAcionadoSeq", strategy = GenerationType.SEQUENCE)
	private Integer codigoSolGrpAcionado;
	
	@ManyToOne
	@JoinColumn(name = "CD_SOLICITACAO")
	private Solicitacao solicitacao;	
	
	@ManyToOne
	@JoinColumn(name = "CD_GRUPO")
	private GrupoLocal grupo;
	
	@Column(name="ACIONAMENTO",length=2,nullable=false)
	private Integer acionamento;
	
	@Column(name = "STATUS", length = 1)
	private Boolean status;
	
	@Column(name="DT_COMUNICACAO")
	@Temporal(TemporalType.TIMESTAMP)
	private java.util.Date dtComunicacao;
	
	@Transient
	private String statusDescricao;
	
}
class SolicitacaoServiceImpl
@Service(value="solicitacaoService")
public class SolicitacaoServiceImpl extends AbstractCrudService<Solicitacao> implements SolicitacaoService {
public Solicitacao insereSolicitacao(Solicitacao solicitacao, Detalhe detalhe, Usuario usuario) throws Exception {
...
solicitacaoRetorno = insert(solicitacao);
//insere Unidades Comunicadas no modulo de protocolos
				if(solicitacao.getSolicitacaoGrupoComunicacao() != null){
				     solGrpComunicacaoService.insertAll(solicitacao.getSolicitacaoGrupoComunicacao());
				}
---
}

abstract class AbstractCrudService

public abstract class AbstractCrudService<Entity> implements
		CrudService<Entity> {

@Override
	public Entity insert(Entity obj) {
		entityManager.persist(obj);
		return obj;
	}

@Override
	public void insertAll(Collection<Entity> collection) {
		for (Entity entity : collection) {
			insert(entity);
		}
		liberaTransacao();

	}

public void liberaTransacao(){
		entityManager.flush();
	}
}

Mais um detalhe se eu retirar a lista List solicitacaoGrupoComunicacao; da entidade Solicitação ele adiciona um solicitação sem problemas

3 Respostas

F

Você viu isso ?

Caused by: java.sql.BatchUpdateException: ORA-01400: cannot insert NULL into (“CLUF”.“CLUF_SOL_GRUPO_ACIONADO”.“CD_SOL_GRP_ACIONADO”)

Verifique se não tem alguma coisa Null na hora de salvar.

B

Olá fdiaz2011,

Ja olhei isso sim, é por isso que estou achando mais estranho isso. :frowning:
Segue a tabela que estou tentando inserir os novos registros, quem sabe ajude

create table CLUF_SOL_GRUPO_ACIONADO
(
CD_SOL_GRP_ACIONADO NUMBER(15) not null,
CD_SOLICITACAO NUMBER(15) not null,
CD_GRUPO NUMBER(4) not null,
ACIONAMENTO NUMBER(2) not null,
STATUS NUMBER(1) default 0 not null,
DT_COMUNICACAO DATE
)

F

Se tiver como, tire o not null de todos os atributos e teste novamente.
Se não der erro é pq realmente em algum ponto ele fica null

Criado 12 de abril de 2013
Ultima resposta 12 de abr. de 2013
Respostas 3
Participantes 2