Problema Array List hibernate

1 resposta
M

bom dia pessoal.

seguinte estou fazendo um sistema onde eu insiro serviços em uma ordem de serviço mas qndo eu insiro mais de um me da erro

meu bean
package br.com.projeto.controller;

import java.util.ArrayList;
import java.util.List;


import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import br.com.projeto.beans.Funcionario;
import br.com.projeto.beans.OrdemDeServico;

import br.com.projeto.beans.PessoaFisica;
import br.com.projeto.beans.PessoaJuridica;

import br.com.projeto.beans.TipoDeServico;
import br.com.projeto.dao.HibernateDao;

@ManagedBean
@SessionScoped
public class OrdemDeServicoBean implements InterfaceController {

	private OrdemDeServico ordemDeServico = new OrdemDeServico();
	private PessoaFisica pessoaFisica = new PessoaFisica();
	private PessoaJuridica pessoaJuridica = new PessoaJuridica();
	private Funcionario funcionario = new Funcionario();
	private List<TipoDeServico> tiposDeServico = new ArrayList<TipoDeServico>();
	private TipoDeServico tipoDeServico = new TipoDeServico();
	private float valor = 0;

	
	@Override
	public void salvar() {		
		try {			
			FacesContext context = FacesContext.getCurrentInstance();
			HibernateDao<OrdemDeServico> hibernateDao = new HibernateDao<OrdemDeServico>(OrdemDeServico.class);
			ordemDeServico.setFuncionario(funcionario);
			ordemDeServico.setPessoaFisica(pessoaFisica);			
			//ordemDeServico.setPessoaJuridica(pessoaJuridica);
			ordemDeServico.setTipoDeServico(tiposDeServico);					
			hibernateDao.salvar(ordemDeServico);
			ordemDeServico = new OrdemDeServico();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Ordem De Serviço  Inserida"));
		} catch (Exception e) {
			System.out.println(e);
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", " " + e));
		}
	}

	@Override
	public void remove() {
		try {
			FacesContext context = FacesContext.getCurrentInstance();
			HibernateDao<OrdemDeServico> hibernateDao = new HibernateDao<OrdemDeServico>(
					OrdemDeServico.class);
			hibernateDao.deletar(ordemDeServico);
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_INFO, "Sucesso!",
					"Ordem De Serviço  Deletada"));
		} catch (Exception e) {
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, "Erro!", " " + e));
		}
	}

	@Override
	public String antesUpdate() {
		try {
			HibernateDao<OrdemDeServico> hibernateDao = new HibernateDao<OrdemDeServico>(OrdemDeServico.class);
			Integer id = ordemDeServico.getId();
			ordemDeServico = hibernateDao.getBean(id);
			return "EditarOrdemDeServico";
		} catch (Exception e) {
			System.out.println("Erro " + e);
			return "Erro.jsf";
		}
	}

	@Override
	public void update() {
		try {
			FacesContext context = FacesContext.getCurrentInstance();
			HibernateDao<OrdemDeServico> hibernateDao = new HibernateDao<OrdemDeServico>(
					OrdemDeServico.class);
			hibernateDao.atualizar(ordemDeServico);
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_INFO, "Sucesso!",
					"Ordem De Serviço  Atualizada"));
		} catch (Exception e) {
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, "Erro!", " " + e));
		}
	}

	public List<OrdemDeServico> getListOrdemDeServico() {
		List<OrdemDeServico> ordemDeServicos = new ArrayList<OrdemDeServico>();
		HibernateDao<OrdemDeServico> hibernateDao = new HibernateDao<OrdemDeServico>(OrdemDeServico.class);
		ordemDeServicos = hibernateDao.getBeans();
		return ordemDeServicos;
	}

	public String selecionarTiposDeServico() {
		HibernateDao<TipoDeServico> hibernateTipoDeServico = new HibernateDao<TipoDeServico>(TipoDeServico.class);
		Integer id = tipoDeServico.getId();
		tipoDeServico = hibernateTipoDeServico.getBean(id);
		return "CadastroOrdemDeServico";
	}

	public List<TipoDeServico> adicionarServico() {
		tiposDeServico.add(tipoDeServico);
		calcularTotal();
		return tiposDeServico;
	}

	public void calcularTotal() {
		TipoDeServico valorTotal = new TipoDeServico(); 
		valor = 0;
		ordemDeServico.setValorTotal(valor);		
		for (int i = 0; i < tiposDeServico.size(); ++i) {  
		     valorTotal = (TipoDeServico) tiposDeServico.get(i);  
		     valor = valor + valorTotal.getValor();  
		 }  		 
		ordemDeServico.setValorTotal(valor);	
	}

	public List<TipoDeServico> getListDeServico() {
		return tiposDeServico;
	}

	public String selecionarFuncionario() {
		HibernateDao<Funcionario> hibernateDao = new HibernateDao<Funcionario>(Funcionario.class);
		Integer id = funcionario.getId();
		funcionario = hibernateDao.getBean(id);
		ordemDeServico.setFuncionario(funcionario);		
		return "CadastroOrdemDeServico";
	}

	public String selecionarPessoaFisica() {
		try {
			HibernateDao<PessoaFisica> hibernateDao = new HibernateDao<PessoaFisica>(PessoaFisica.class);
			Integer id = pessoaFisica.getId();
			pessoaFisica = hibernateDao.getBean(id);
			return "CadastroOrdemDeServico";
		} catch (Exception e) {
			System.out.println("Erro " + e);
			return "Erro";
		}
	}

	public String SelecionarPessoaJuridica() {
		HibernateDao<PessoaJuridica> hibernateDao = new HibernateDao<PessoaJuridica>(
				PessoaJuridica.class);
		Integer id = pessoaJuridica.getId();
		pessoaJuridica = hibernateDao.getBean(id);
		return "CadastroOrdemDeServico";
	}

	public OrdemDeServico getOrdemDeServico() {
		return ordemDeServico;
	}

	public void setOrdemDeServico(OrdemDeServico ordemDeServico) {
		this.ordemDeServico = ordemDeServico;
	}

	public PessoaFisica getPessoaFisica() {
		return pessoaFisica;
	}

	public void setPessoaFisica(PessoaFisica pessoaFisica) {
		this.pessoaFisica = pessoaFisica;
	}

	public PessoaJuridica getPessoaJuridica() {
		return pessoaJuridica;
	}

	public void setPessoaJuridica(PessoaJuridica pessoaJuridica) {
		this.pessoaJuridica = pessoaJuridica;
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public List<TipoDeServico> getTiposDeServico() {
		return tiposDeServico;
	}

	public void setTiposDeServico(List<TipoDeServico> tipoDeServico) {
		this.tiposDeServico = tipoDeServico;
	}

	public TipoDeServico getTipoDeServico() {
		return tipoDeServico;
	}
	
	public float getValor() {
		return valor;
	}

	public void setValor(float valor) {
		this.valor = valor;
	}


	public void setTipoDeServico(TipoDeServico tipoDeServico) {
		this.tipoDeServico = tipoDeServico;
	}

}

minha classe

package br.com.projeto.beans;

import java.util.List;


import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
public class OrdemDeServico {

	@Id
	@GeneratedValue
	private Integer id;	
	@OneToOne(cascade = javax.persistence.CascadeType.PERSIST)
	@JoinColumn(name = "id_pessoaFisica")
	@Fetch(FetchMode.JOIN)
	private PessoaFisica pessoaFisica;
//	@OneToOne(cascade = javax.persistence.CascadeType.PERSIST)
//	@JoinColumn(name = "id_pessoaJuridica")
//	@Fetch(FetchMode.JOIN)
//	private PessoaJuridica pessoaJuridica;
	@OneToOne(cascade = javax.persistence.CascadeType.PERSIST)
	@JoinColumn(name = "id_funcionario")
	@Fetch(FetchMode.JOIN)
	private Funcionario funcionario;
	@OneToMany(cascade = javax.persistence.CascadeType.PERSIST)
	@JoinColumn(name = "id")
	@Fetch(FetchMode.JOIN)
	private List<TipoDeServico> tipoDeServico;
	private String status;
	private Float valorTotal;
	
	public List<TipoDeServico> getTipoDeServico() {
		return tipoDeServico;
	}

	public void setTipoDeServico(List<TipoDeServico> tipoDeServico) {
		this.tipoDeServico = tipoDeServico;
	}

	public Float getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(Float valorTotal) {
		this.valorTotal = valorTotal;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public PessoaFisica getPessoaFisica() {
		return pessoaFisica;
	}

	public void setPessoaFisica(PessoaFisica pessoaFisica) {
		this.pessoaFisica = pessoaFisica;
	}

//	public PessoaJuridica getPessoaJuridica() {
//		return pessoaJuridica;
//	}

//	public void setPessoaJuridica(PessoaJuridica pessoaJuridica) {
//		this.pessoaJuridica = pessoaJuridica;
//	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

}

o erro

38695 [http-bio-8080-exec-3] ERROR org.hibernate.jdbc.AbstractBatcher - Exception executing batch: 
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
	at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:85)
	at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:70)
	at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:90)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:183)
	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:1206)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at br.com.projeto.dao.HibernateDao.salvar(HibernateDao.java:23)
	at br.com.projeto.controller.OrdemDeServicoBean.salvar(OrdemDeServicoBean.java:43)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
	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:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:508)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
38697 [http-bio-8080-exec-3] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
	at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:85)
	at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:70)
	at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:90)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:183)
	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:1206)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at br.com.projeto.dao.HibernateDao.salvar(HibernateDao.java:23)
	at br.com.projeto.controller.OrdemDeServicoBean.salvar(OrdemDeServicoBean.java:43)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
	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:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:508)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

1 Resposta

A

cara,

seu relacionamentos sao unidirecional ou bidirecional? pq se for bidirecional vc tem que fazer a ordemServico receber os objetos como vc fez, mas vc tem tbm que atribuir o objeto OrderServico ao outros objetos.
e ser unidirecional, acho que vc vai ter que usar JoinColumn

t+

Criado 3 de novembro de 2011
Ultima resposta 3 de nov. de 2011
Respostas 1
Participantes 2