Bom dia Mestres!
Já li vários tópicos postados e não encontrei algo semelhante ao que estou passando.
Preciso fazer uma inclusão simples de Unidades de Medida (Metro (m), Quilometro(km), etc) e vincular ao Cliente que está operando o sistema no momento. Para o vinculo entre o Cliente e Unidade de Medida estou usando uma terceira entidade (ClienteUnidadeMedida) pois as Unidades só poderão ser acessadas, pelo cliente, as que forem cadastradas por ele mesmo ou previamente vinculadas a ele.
Minha Entidade Unidade está definida assim:
@Entity
@Table(name = "unidademedida")
public class UnidadeMedida implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "unicod_seq", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "unicod_seq", sequenceName = "unicod_seq", initialValue = 1, allocationSize = 1)
@Column(name = "id", nullable = false, updatable = false)
private Long id;
@ManyToOne
@JoinColumn(name="emg_id", nullable = false)
private EmpresaGestora empresaGestora;
@Column(name = "sundnome", nullable = false, length = 30)
private String sundnome;
@Column(name = "sundsigla", nullable = false, length = 10)
private String sundsigla;
@OneToMany(fetch = FetchType.LAZY, mappedBy="unidadeMedida", cascade = CascadeType.PERSIST)
private List<ClienteUnidadeMedida> unidadeMedidasCliente;
public List<ClienteUnidadeMedida> getUnidadeMedidasCliente() {
if (unidadeMedidasCliente == null){
unidadeMedidasCliente = new ArrayList<>();
}
return unidadeMedidasCliente;
}
public void setUnidadeMedidasCliente(List<ClienteUnidadeMedida> unidadeMedidasCliente){
this.unidadeMedidasCliente = unidadeMedidasCliente;
}
}
Minha entidade ClienteUnidadeMedida está assim:
@Entity
@Table(name="cliente_unidademedida")
public class ClienteUnidadeMedida implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator="cum_seq", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name="cum_seq", sequenceName = "cum_seq", initialValue = 1, allocationSize = 1)
@Column(name="cum_id", nullable = false, updatable = false)
private Long id;
@ManyToOne(optional = false)
@JoinColumn(name="unm_id", nullable = false)
private UnidadeMedida unidadeMedida;
@Column(name="cli_id")
private Long idCliente;
}
Minha rotina de gravação está
public UnidadeMedida salvar(UnidadeMedida unidadeMedida, Long idCliente) throws ISGTException {
try{
ClienteUnidadeMedida cum = new ClienteUnidadeMedida();
cum.setIdCliente(idCliente);
unidadeMedida.getUnidadeMedidasCliente().add(cum);
UnidadeMedida um = unidadeMedidaController.gravar(unidadeMedida);
} catch(Exception ex){
Logger.getLogger(UnidadeMedidaFacade.class.getName()).log(Level.SEVERE, null, ex);
throw ex;
}
}
Meu gravar está definido assim:
public boolean salvar(T obj) throws ISGTException{
try {
this.utx.begin(); // utx = @Resource private UserTransaction utx;
this.entityManager.merge(obj);
commit();
return true;
} catch (NotSupportedException | SystemException | ConstraintViolationException | PersistenceException e) {
rollback();
logger.error("---FALHA AO SALVAR REGISTRO (PERSIST)---", e);
throw new ISGTException("---FALHA AO SALVAR REGISTRO---");
}
}
Acontece que ao processar está ocorrendo o seguinte erro:
Informações: Hibernate:
insert into cliente_unidademedida (cli_id, unm_id, cum_id) values (?, ?, ?)WARN: SQL Error: 0, SQLState: 23502 ERROR: ERRO: valor nulo na coluna “unm_id” viola a restrição não-nula Detalhe: Registro que falhou contém (7, 1, null). Informações: HHH000010: On release of batch it still contained JDBC statements Informações: RAR7115: Unable to set ClientInfo for connection Advertência: DTX5014: Caught exception in beforeCompletion() callback: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683) at org.hibernate.jpa.spi.AbstractEntityManagerImpl$CallbackExceptionMapperImpl.mapManagedFlushFailure(AbstractEntityManagerImpl.java:1882) at org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorNonTrackingImpl.beforeCompletion(SynchronizationCallbackCoordinatorNonTrackingImpl.java:115) at org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization.beforeCompletion(RegisteredSynchronization.java:50) at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:452) at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:854) at com.sun.enterprise.transaction.UserTransactionImpl.commit(UserTransactionImpl.java:212) at br.com.isgt.commons.controller.ISGTBean.commit(ISGTBean.java:43) at br.com.isgt.commons.controller.ISGTBean.salvar(ISGTBean.java:70) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081) at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153) at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4786) at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) at br.com.isgt.interceptors.InterceptorPersist.validateObject(InterceptorPersist.java:55) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64) at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369) at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4758) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4746) at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212) at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) at com.sun.proxy.$Proxy248.salvar(Unknown Source) at br.com.isgt.controller.UnidadeMedidaController.associarAoCliente(UnidadeMedidaController.java:121) at br.com.isgt.facade.UnidadeMedidaFacade.salvar(UnidadeMedidaFacade.java:50) at br.com.isgt.beans.BeanUnidadeMedida.salvar(BeanUnidadeMedida.java:48) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at javax.el.ELUtil.invokeMethod(ELUtil.java:332) at javax.el.BeanELResolver.invoke(BeanELResolver.java:537) at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256) at com.sun.el.parser.AstValue.invoke(AstValue.java:283) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304) at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40) at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:147) at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814) at javax.faces.component.UICommand.broadcast(UICommand.java:300) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571) at java.lang.Thread.run(Thread.java:745)
Detalhe, se eu gravo a Unidade de Medida sozinha ela funciona normalmente, agora se eu fizer a gravação do relacionamento não funciona.
Vi que o problema é o Id da minha Unidade de Medida, mas não sei o que fazer pra forçar o retorno desse Id pra eu usar no vinculo.
Já tentei de várias formas fazer essa configuração e até agora nada.
Desde já agradeço a atenção.
Abraço a todos.