[Resolvido]Modificação do objeto atualiza banco de dados automaticamente

E ai pessoal blz, Estou fazendo uma aplicação que eu tenho uma <p:dataTable id=“ItensDisponiveis” …> com vários itens listados com um <p:commandLink value=“Add” …> que adiciona o item selecionado para outra lista que seria a de pedido. tudo funciona bem, o que acontece é que quando eu pego o objeto da primeira table e uso um item.setQuantidade(1); para salvar apenas a quantidade x deste produto na segunda <p:dataTable id=“pedido” …>, ele automaticamente muda o valor da minha coluna no banco de dados . ou seja por exemplo eu tenho 50 unidades de mouse microsoft na primeira lista, ai quando vou adicionar mando o objeto selecionado por parâmetro e dentro do método eu mudo o valor que era 50 para 1 por exemplo para a quantidade deste item no pedido. Entretanto quando eu faço isso a quantidade do meu item na tabela item vai a 1 também(e que deveria manter em 50), desculpe se já existir algum tópico sobre isso mas é que nem sei bem como explicar ou procurar o que está acontecendo. Estou usando Hibernate + JSF2 + PrimeFaces.

obs: não estou fazendo nenhuma operação no banco neste instante, estou teoricamente apenas manipulando dados no bean entre tables.

Obrigado

Discordo, você está realizando alteração no banco. Deve existir um update lá perdido.

Só se for automático com o hibernate pois manualmente eu não tenho eu cheguei até a comentar o conteúdo do saveOrUpdate da classe Item.
e o método só faz isso:

if(!listaItem.contains(item)){
   item.setQuantidade(1);
   listaItem.add(item);
}

Ele faz tudo certo fora que atualiza a tabela. e não sei o porquê.

Sinceramente, ainda acredito que existe alguma chamada que faz a atualização (e até diria que é na linha 233, mas como não temos o código…).

PedidoBean


@ViewScoped
@ManagedBean(name="pedidoBean")
public class PedidoBean implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 3366510622223475042L;
	//Object needed
	Pedido pedido = new Pedido();
	Item item = new Item();
	List<Item> listaItem = new ArrayList<Item>();  

	//--------------------------------------------CRUD Pedido's class - BEGIN------------------------------------------------------------------
	public void cadastrar(){
		
	}
	
	public void consultar(){
		
	} 
	
	public void alterar(){
		
	}
	
	public void excluir(){
		
	} 
	//--------------------------------------------CRUD Pedido's class - END------------------------------------------------------------------
	public void adicionarItemToPedido(Item item){System.out.println(item.getNome());

		if(!listaItem.contains(item)){item.setQuantidade(1);
			listaItem.add(item);
			}
		else{ 
			System.out.println(listaItem.indexOf(item)+ "   " + item.getQuantidade());
			listaItem.set(listaItem.indexOf(item), item);
			
			FacesMessage msg = new FacesMessage("Item adicionado",  Integer.toString(item.getQuantidade()));  
			
		    FacesContext.getCurrentInstance().addMessage(null, msg);
		}
			
	}
	public void removerItemToPedido(){System.out.println(item.getNome());
		listaItem.remove(item);
	}
	
	public void fecharPedido(){
		
	}
	
	public void onEdit(RowEditEvent event) {  
	    FacesMessage msg = new FacesMessage("Item Atualizado", ((Item) event.getObject()).getNome());  
	
	    FacesContext.getCurrentInstance().addMessage(null, msg);  
	}  
	  
	public void onCancel(RowEditEvent event) {  
	    FacesMessage msg = new FacesMessage("Altualizacao Cancelada", ((Item) event.getObject()).getNome());  
	
	    FacesContext.getCurrentInstance().addMessage(null, msg);  
	}
	//--------------------------------------------Methods Getters and Setters - BEGIN---------------------------------------------------------
	public Pedido getPedido() {
		return pedido;
	}

	public void setPedido(Pedido pedido) {
		this.pedido = pedido;
	}
	
	public List<Item> getListaItem() {
		return listaItem;
	}

	public void setListaItem(List<Item> listaItem) {
		this.listaItem = listaItem;
	}
	
	public Item getItem() {
		return item;
	}

	public void setItem(Item item) {
		this.item = item;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}
		//--------------------------------------------Methods Getters and Setters - END-----------------------------------------------------------
			
} //End of class

Pedido.JSF

<h:form id="formPagina"> <p:growl id="messages" showDetail="true"/>
				
				<p:panelGrid id="pgPedido" columns="2"> <f:facet name="header">Novo Pedido</f:facet>
					<p:outputLabel for="codigoPedido" value="Pedido:" />
					<p:inputText id="codigoPedido"  />
					<p:outputLabel for="dataPedido" value="Data:" />
					<p:inputMask id="dataPedido" mask="99/99/9999" value="#{pedidoBean.pedido.dataPedido}" />
					<p:outputLabel for="descontoPedido" value="Desconto(%):" />
					<p:inputText id="descontoPedido" />
				</p:panelGrid>
				
				<br/><br/>
				
				<p:dataTable id="dtItem" var="itemSelecionado" value="#{itemBean.itemListagem}" paginator="true" > <f:facet name="header">Itens Disponiveis</f:facet>
					<p:column headerText="Código">
						<h:outputLabel value="#{itemSelecionado.codigoItem}" />
					</p:column>
					<p:column headerText="Nome">
						<h:outputLabel value="#{itemSelecionado.nome}" />
					</p:column>
					<p:column headerText="Quantidade">
						<h:outputLabel value="#{itemSelecionado.quantidade}" />
					</p:column>
					<p:column>
						<p:commandLink value="ADD" action="#{pedidoBean.adicionarItemToPedido(itemSelecionado)}" update=":formPagina:dtItensSelecionados :formPagina:messages" >
						</p:commandLink>
					</p:column>
				</p:dataTable>
				
				<br/><br/>
			
				<p:dataTable id="dtItensSelecionados" value="#{pedidoBean.listaItem}" var="item" editable="true"> 
					
					<f:facet name="header">Itens Selecionados</f:facet>
					
					<p:ajax event="rowEdit" listener="#{pedidoBean.onEdit}" update=":formPagina:messages" />  
        			<p:ajax event="rowEditCancel" listener="#{pedidoBean.onCancel}" update=":formPagina:messages" />
        
					<p:column id="dtisCodigo" headerText="Código">  
	                    <h:outputLabel value="#{item.codigoItem}" /> 
					</p:column>
					<p:column id="dtisNome" headerText="Nome">
						
						<h:outputLabel value="#{item.nome}" />
					</p:column>
					<p:column id="dtisQuantidade" headerText="Quantidade">
					<p:cellEditor>
							<f:facet name="output">  
			                    <h:outputLabel value="#{item.quantidade}" /> 
			                </f:facet>  
			                <f:facet name="input">  
			                    <p:inputText value="#{item.quantidade}" style="width:100%"/>  
			                </f:facet>
						</p:cellEditor>
					</p:column>
					<p:column id="dtisRemover">
						<p:commandLink action="#{pedidoBean.removerItemToPedido()}">
							<h:graphicImage library="images" name="delete.png" />
						</p:commandLink>
					</p:column>
					<p:column id="rowEditorCommand">
						<p:rowEditor />
					</p:column>
				</p:dataTable>
				<br />
				<p:commandButton id="fecharPedido" action="#{pedidoBean.fecharPedido()}" ></p:commandButton>
	
			</h:form>

Não está muito organizado pois ainda estou só testando mesmo, coloquei apenas o , o ponto são as 2 <p:dataTable>, o resto não é importante e nem fiz ainda.
Obrigado pela ajuda.

Passe para false o atributo “autocommit”

valew pela dica, eu setei esta configuração no arquivo do hibernate, mas ainda continua alterando o valor.

Descobri que o que acontece é que o Hibernate sincroniza os objetos persistentes e se você o alterar ele automaticamente atualiza no banco de dados. Agora preciso descobrir como fazer um objeto virar transient.

[quote=Rakde]Descobri que o que acontece é que o Hibernate sincroniza os objetos persistentes e se você o alterar ele automaticamente atualiza no banco de dados. Agora preciso descobrir como fazer um objeto virar transient.
[/quote]
Criei um objeto auxiliar passando apenas os atributos desejados assim o novo objeto permaneceu transient e o hibernate não dava update no valor que eu queria manter!.
Obrigado pessoal.