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

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[code]
@Service(value=“solicitacaoService”)
public class SolicitacaoServiceImpl extends AbstractCrudService 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());
}

}
[/code]

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

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.

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
)

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