[Resolvido] For para salvar uma lista com JPA

6 respostas Resolvido
jpavraptor
W

Boa noite pessoal, sei que a pergunta é bem de iniciante, mais estou com dificuldades de atualizar uma lista, quando uso para atualizarr um item apenas vai beleza conforme o código:

@Post
@Path("/itemList/atualizarStatus")
public void atualizarStatus(Item item) {
dao.atualiza(item);
result.redirectTo(NotaController.class).lista();
}

porem eu tenho que fazer um for para atualizar o campo status de uma só vez, nao consigo

Desculpem a pergunta, mais realmente não estou conseguindo!

Tentei fazer algo do tipo:

@Post
@Path("/itemList/atualizarStatus")
public void atualizarStatus(Item item) {
for(Item i : item){
dao.atualiza(i);
}
result.redirectTo(NotaController.class).lista();
}

porem da erro na sintax

podem me ajudar?

6 Respostas

C

Voce tem que passar uma lista.

public void atualizarStatus(List<Item> itens){
   for(Item i: itens) {
     dao.findById(i.getId()); //tem que fazer o busca do objeto novamente para evitar exception de detached entity
     dao.atualiza(i);
  }
 //redirect
}
W

Boa noite Campelo!

Fiz o que me aconselhou, porem ta dando o seguinte erro, ja fiz uma pesquisa mas não encontrei uma solução, vou descansar um pouco amanha retomo, se tiver alguma ideia será bem vida!

root cause
java.lang.IllegalArgumentException: id to load is required for loading

org.hibernate.event.spi.LoadEvent.(LoadEvent.java:87)

org.hibernate.event.spi.LoadEvent.(LoadEvent.java:59)

org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2537)

org.hibernate.internal.SessionImpl.get(SessionImpl.java:951)

org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1110)

org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1068)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

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

org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:40)

org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)

org.jboss.weld.proxies.EntityManager$-770367075$Proxy$_$$<em>WeldClientProxy.find(Unknown Source)

br.com.inteligenteweb.grade.dao.ItemDao.buscaId(ItemDao.java:46)

br.com.inteligenteweb.grade.dao.ItemDao$Proxy$</em>$$<em>WeldClientProxy.buscaId(Unknown Source)

br.com.inteligenteweb.grade.controller.ItemController.atualizarStatus(ItemController.java:73)

br.com.inteligenteweb.grade.controller.ItemController$Proxy$</em>$$<em>WeldClientProxy.atualizarStatus(Unknown Source)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

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

net.vidageek.mirror.provider.java.PureJavaMethodReflectionProvider.invoke(PureJavaMethodReflectionProvider.java:38)

net.vidageek.mirror.invoke.MethodHandlerByMethod.withArgs(MethodHandlerByMethod.java:54)

br.com.caelum.vraptor.observer.ExecuteMethod.execute(ExecuteMethod.java:87)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

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

org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)

org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)

org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)

org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)

org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)

org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)

org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)

org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)

org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:78)

br.com.caelum.vraptor.core.DefaultInterceptorStack$Proxy$</em>$$<em>WeldClientProxy.next(Unknown Source)

br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack.next(DefaultSimpleInterceptorStack.java:49)

br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack$Proxy$</em>$$<em>WeldClientProxy.next(Unknown Source)

br.com.caelum.vraptor.interceptor.InterceptorExecutor.executeAround(InterceptorExecutor.java:77)

br.com.caelum.vraptor.interceptor.InterceptorExecutor$Proxy$</em>$$<em>WeldClientProxy.executeAround(Unknown Source)

br.com.caelum.vraptor.interceptor.AspectStyleInterceptorHandler.execute(AspectStyleInterceptorHandler.java:87)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:83)

br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:98)

br.com.caelum.vraptor.interceptor.FlashInterceptor$Proxy$</em>$$<em>WeldClientProxy.intercept(Unknown Source)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:58)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:83)

br.com.caelum.vraptor.core.DefaultInterceptorStack$Proxy$</em>$$<em>WeldClientProxy.next(Unknown Source)

br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack.next(DefaultSimpleInterceptorStack.java:49)

br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack$Proxy$</em>$$<em>WeldClientProxy.next(Unknown Source)

br.com.inteligenteweb.grade.interceptor.AutorizadorInterceptor.intecepta(AutorizadorInterceptor.java:51)

br.com.inteligenteweb.grade.interceptor.AutorizadorInterceptor$Proxy$</em>$$<em>WeldClientProxy.intecepta(Unknown Source)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

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

net.vidageek.mirror.provider.java.PureJavaMethodReflectionProvider.invoke(PureJavaMethodReflectionProvider.java:38)

net.vidageek.mirror.invoke.MethodHandlerByMethod.withArgs(MethodHandlerByMethod.java:54)

br.com.caelum.vraptor.interceptor.StepInvoker.invokeMethod(StepInvoker.java:63)

br.com.caelum.vraptor.interceptor.StepInvoker.tryToInvoke(StepInvoker.java:54)

br.com.caelum.vraptor.interceptor.StepInvoker$Proxy$</em>$$<em>WeldClientProxy.tryToInvoke(Unknown Source)

br.com.caelum.vraptor.interceptor.InterceptorExecutor.executeAround(InterceptorExecutor.java:75)

br.com.caelum.vraptor.interceptor.InterceptorExecutor$Proxy$</em>$$<em>WeldClientProxy.executeAround(Unknown Source)

br.com.caelum.vraptor.interceptor.AspectStyleInterceptorHandler.execute(AspectStyleInterceptorHandler.java:87)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:83)

br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:75)

br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor$Proxy$</em>$$<em>WeldClientProxy.intercept(Unknown Source)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:58)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:83)

br.com.caelum.vraptor.core.DefaultInterceptorStack.start(DefaultInterceptorStack.java:93)

br.com.caelum.vraptor.core.DefaultInterceptorStack$Proxy$</em>$$_WeldClientProxy.start(Unknown Source)

br.com.caelum.vraptor.observer.RequestHandlerObserver.handle(RequestHandlerObserver.java:86)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

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

org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)

org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)

org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)

org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)

org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)

org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)

org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)

org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)

org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)

br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:116)
C

O id do objeto item esta nulo.

http://respostas.guj.com.br/6804-erro-id-to-load-is-required-for-loading---java-se

W

ele esta sendo preenchido normalmente no HTML

form action="/vraptor-produtos/itemList/atualizarStatus" method=“POST”>

<tr>
	<td>318 <input type="hidden" name="item.id" value="318" /></td>
	<td>123456 <input type="hidden" name="item.nota.id" value="1" /></td>
    <td>Tanga Bia <input type="hidden" name="item.produto.id" value="1" /></td>
    <td>4.0 <input type="hidden" name="item.produtoValor" value="4.0" /></td>
    <td>BIC <input type="hidden" name="item.cor.id" value="1" /></td>
    <td>P <input type="hidden" name="item.medida.id" value="2" /></td>
    <td>1.0 <input type="hidden" name="item.quantidade" value="1.0" /></td>
    <td>false <input type="hidden" name="item.statusNoSite" value="true" /></td>	
			</tr>
		
			<tr>
	<td>319 <input type="hidden" name="item.id" value="319" /></td>
	<td>123456 <input type="hidden" name="item.nota.id" value="1" /></td>
    <td>Tanga Bia <input type="hidden" name="item.produto.id" value="1" /></td>
    <td>4.0 <input type="hidden" name="item.produtoValor" value="4.0" /></td>
    <td>RUBI <input type="hidden" name="item.cor.id" value="2" /></td>
    <td>GG <input type="hidden" name="item.medida.id" value="5" /></td>
    <td>1.0 <input type="hidden" name="item.quantidade" value="1.0" /></td>
    <td>false <input type="hidden" name="item.statusNoSite" value="true" /></td>	
			</tr>
		
		
	<button  type="submit">Mudar Status</button>
 </form>
W

Bom dia! campelo, já li tudo tentando a dias resolver isso, vou postar o codigo e a saida do sql gerado eclipse,

itemDao

//ja passei assim tb: public void salvaLista(List<Item> item){
public void salvaLista(Item item){
em.merge(item);

}
Controller @Post @Path("/itemList/atualizarStatus") public void atualizarStatus(List<Item> item) { for(Item i : item){ // dao.findById(i.getId()); dao.salvaLista(i); } result.redirectTo(NotaController.class).lista();
}

o jsp

<form action="<c:url value="/itemList/atualizarStatus"/>" method=“POST”>
<c:forEach items="${itemList}" var=“item”>
<tr>
<td>${item.id } <input type=“hidden” name=“item.id” value="${item.id}" /></td>
<td>${item.nota.numero } <input type=“hidden” name=“item.nota.id” value="${item.nota.id}" /></td>
<td>${item.produto.nome } <input type=“hidden” name=“item.produto.id” value="${item.produto.id}" />
<td>${item.produto.valor } <input type=“hidden” name=“item.produtoValor” value="${item.produto.valor}" />
<td>${item.cor.cor } <input type=“hidden” name=“item.cor.id” value="${item.cor.id}" />
<td>${item.medida.medida } <input type=“hidden” name=“item.medida.id” value="${item.medida.id}" />
<td>${item.quantidade } <input type=“hidden” name=“item.quantidade” value="${item.quantidade}" />
<td>${item.statusNoSite } <input type=“hidden” name=“item.statusNoSite” value=“true” />

Saida do console Hibernate: select produto0_.id as id1_5_0_, produto0_.codigoSite as codigoSi2_5_0_, produto0_.fornecedor_id as forneced7_5_0_, produto0_.nome as nome3_5_0_, produto0_.nomeProdutoFornecedor as nomeProd4_5_0_, produto0_.urlImagem as urlImage5_5_0_, produto0_.valor as valor6_5_0_ from Produto produto0_ where produto0_.id=? Hibernate: insert into Item (cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) values (?, ?, ?, ?, ?, ?, ?) Hibernate: insert into Item (cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) values (?, ?, ?, ?, ?, ?, ?) Hibernate: insert into Item (cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) values (?, ?, ?, ?, ?, ?, ?) Hibernate: insert into Item (cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) values (?, ?, ?, ?, ?, ?, ?) Hibernate: insert into Item (cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) values (?, ?, ?, ?, ?, ?, ?) Hibernate: insert into Item (cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) values (?, ?, ?, ?, ?, ?, ?) Hibernate: insert into Item (cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) values (?, ?, ?, ?, ?, ?, ?) Hibernate: insert into Item (cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) values (?, ?, ?, ?, ?, ?, ?) Hibernate: insert into Item (cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) values (?, ?, ?, ?, ?, ?, ?) Hibernate: insert into Item (cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) values (?, ?, ?, ?, ?, ?, ?) Hibernate: insert into Item (cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) values (?, ?, ?, ?, ?, ?, ?) Hibernate: insert into Item (cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) values (?, ?, ?, ?, ?, ?, ?) 08:57:16,778 DEBUG [CDIBasedContainer ] asking cdi to get instance for interface br.com.caelum.vraptor.view.LogicResult 08:57:16,778 DEBUG [CDIBasedContainer ] beans for interface br.com.caelum.vraptor.view.LogicResult is [Managed Bean [class br.com.caelum.vraptor.view.DefaultLogicResult] with qualifiers [@Any @Default]] 08:57:16,778 DEBUG [DefaultLogicResult ] redirecting to class NotaController 08:57:16,778 DEBUG [JavassistProxifier ] Class br.com.inteligenteweb.grade.controller.NotaController is proxy: false 08:57:16,780 DEBUG [JavassistProxifier ] a proxy for class br.com.inteligenteweb.grade.controller.NotaController was created as class br.com.inteligenteweb.grade.controller.NotaController_$$_jvsted5_9 08:57:16,780 DEBUG [JavassistProxifier ] Class br.com.inteligenteweb.grade.controller.NotaController is proxy: false 08:57:16,780 DEBUG [DefaultRouter ] Selected route for public java.util.List br.com.inteligenteweb.grade.controller.NotaController.lista() is [FixedMethodStrategy: /nota/lista lista [GET]] 08:57:16,781 DEBUG [DefaultRouter ] Returning URL /nota/lista for [FixedMethodStrategy: /nota/lista lista [GET]] 08:57:16,781 DEBUG [DefaultLogicResult ] redirecting to /vraptor-produtos/nota/lista 08:57:16,781 DEBUG [DefaultInterceptorStack] All registered interceptors have been called. End of VRaptor Request Execution. Hibernate: update Item set cor_id=?, medida_id=?, nota_id=?, produto_id=?, produtoValor=?, quantidade=?, statusNoSite=? where id=? Hibernate: update Item set cor_id=?, medida_id=?, nota_id=?, produto_id=?, produtoValor=?, quantidade=?, statusNoSite=? where id=? 08:57:16,875 DEBUG [ForwardToDefaultView] Request already dispatched and commited somewhere else, not forwarding.
W
Solucao aceita

Postei a questão em um outro fórum, e o usuário Ricardo Johannsen Marques Cutrim Pereira, me ajudou com a solução do problema.

bastava fazer isso no list do HTML

<tr>
                <td><input type="text" name="itens[0].id" value="476" /></td>
                <td><input type="text" name="itens[0].nota.id" value="1" /></td>
                  <td><input type="text" name="itens[0].produto.id" value="1" /></td>
                <td><input type="text" name="itens[0].produtoValor" value="4.0" /></td>
                <td><input type="text" name="itens[0].cor.id" value="1" /></td>
                <td><input type="text" name="itens[0].medida.id" value="3" /></td>
                <td><input type="text" name="itens[0].quantidade" value="1.0" /></td>
                <td><input type="text" name="itens[0].statusNoSite" value="false" /></td>    
            </tr>

            <tr>
                <td><input type="text" name="itens[1].id" value="477" /></td>
                <td><input type="text" name="itens[1].nota.id" value="1" /></td>
                  <td><input type="text" name="itens[1].produto.id" value="1" /></td>
                <td><input type="text" name="itens[1].produtoValor" value="4.0" /></td>
                <td><input type="text" name="itens[1].cor.id" value="2" /></td>
                <td><input type="text" name="itens[1].medida.id" value="5" /></td>
                <td><input type="text" name="itens[1].quantidade" value="1.0" /></td>
                <td><input type="text" name="itens[1].statusNoSite" value="false" /></td>    
            </tr>

    <button  type="submit">Mudar Status</button>
 </form>

colocando os colchetes, a informação passou a vir correta para o controller!

Obrigado pela ajuda campelo, mais foi resolvido! :slight_smile:

Criado 20 de junho de 2017
Ultima resposta 25 de jun. de 2017
Respostas 6
Participantes 2