Erro ao remover com hibernate

bem, estou tentando remover um objeto do meu banco de dados com o seguitne codigo:

[code]public void remover(Cheque cheque) {
session = ConnectDB.getInstance();
Transaction tx = null;

	try {
		tx = session.beginTransaction();
		session.delete(cheque);
		tx.commit();
	}
	
	catch(HibernateException e) {
		e.printStackTrace();
	}
	finally {
		session.close();
	}
}[/code]

e esta dando o seguinte erro:

org.hibernate.exception.DataException: Could not execute JDBC batch update at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:77) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at dao.ChequeHibernateDAO.remover(ChequeHibernateDAO.java:43) at dao.ChequeHibernateDAO.removeCheques(ChequeHibernateDAO.java:81) at gui.AbasCadastro$Eventos.actionPerformed(AbasCadastro.java:172) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.AbstractButton.doClick(Unknown Source) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) Caused by: java.sql.BatchUpdateException: Data truncation: Column was set to data type implicit default; NULL supplied for NOT NULL column 'cliente_codigo' at row 1 at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:665) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)

faz uma hora q estou tetnando descobrir e nao axo o problema, alguem sabe oq eh?

Verifique o relacionamento que cheque tem, provavelmente você esta tentando apagar um objeto que esta amarrado com outro, verifique as propriedades do mapeamento de cheque ou popule cheque totalmente, antes de tentar apagar.

Ou pode ser que esta finalizando a session antes de apagar os demais.

ele nao esta amarrado a nenhum outro objeto, ele faz referencia ao objeto Servicos e nao o contrario, isso de alguma forma causa esse certo tipo de problema? se sim como posso contorna-lo? retirando as ligacoes antes de apagar?

Se cheque não tem atributo nenhum que ligue a serviço, não ha problema algum. Tente deixar a session aberta e teste. provavelmente deve ser ela que esta sendo fechada antes de concluir a transação.

bem, fiz oq vc disse e o erro persiste, nao mudou em nada

Me responde uma coisa, só esta dando erro na exclusão? nos outros metodos cruds esta funcionando?
Poste os seus dois beas, cheque e serviço, pra poder facilitar as coisas.

todos os metodos de salvar e atualizar esta funcionando perfeitamente

esta ai os codigos:

[code]package entity;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = “cheque”)
public class Cheque implements java.io.Serializable{

private int ID;
private String banco;
private String conta;
private String n;
private String data;
private float valor;	
private Servicos servico;

public Cheque() {
	
}

@Id
@GeneratedValue
@Column(name = "codigo")
public int getID() {
	return this.ID;
}

public void setID(int ID) {
	this.ID = ID;
}

@Column(name = "banco")
public String getBanco() {
	return this.banco;
}

public void setBanco(String banco) {
	this.banco = banco;
} 

@Column(name = "conta")
public String getConta() {
	return this.conta;
}

public void setConta(String conta) {
	this.conta = conta;
}

@Column(name = "n")
public String getN() {
	return this.n;
}

public void setN(String n) {
	this.n = n;
}

@Column(name = "dataa")
public String getData() {
	return this.data;
}

public void setData(String data) {
	this.data = data;
}

@Column(name = "valor")
public float getValor() {
	return this.valor;
}

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

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "servicos_codigo")
public Servicos getServico() {
	return this.servico;
}

public void setServico(Servicos servico) {
	this.servico = servico;
}

}[/code]

[code]package entity;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import entity.Carros;
import entity.Cheque;

@Entity
@Table(name = “servicos”)
public class Servicos implements java.io.Serializable {

private int ID;
private float preco;
private String data2;
private String obs;
private String restricao;
private String financeira;
private String dataRecibo;
private float taxas;
private float desconto;
private Carros carro;
private Cliente cliente;
private Lojas loja;
private float avista;
private float acheque;
private float cartao;
private float promissoria;

public Servicos() {
	
}

@Id
@GeneratedValue
@Column(name = "codigo")
public int getID() {
	return this.ID;
}

public void setID(int ID) {
	this.ID = ID;
}

@Column(name = "preco")
public float getPreco() {
	return this.preco;
}

public void setPreco(float preco) {
	this.preco = preco;
}

@Column(name = "data_2")
public String getData2() {
	return this.data2;
}

public void setData2(String data2) {
	this.data2 = data2;
}

@Column(name = "obs")
public String getObs() {
	return this.obs;
}

public void setObs(String obs) {
	this.obs = obs;
}

@Column(name = "restricao")
public String getRestricao() {
	return this.restricao;
}

public void setRestricao(String restricao) {
	this.restricao = restricao;
}

@Column(name = "financeira")
public String getFinanceira() {
	return this.financeira;
}

public void setFinanceira(String financeira) {
	this.financeira = financeira;
}

@Column(name = "dataRecibo")
public String getDataRecibo() {
	return this.dataRecibo;
}

public void setDataRecibo(String dataRecibo) {
	this.dataRecibo = dataRecibo;
}	

@Column(name = "taxas")
public float getTaxas() {
	return this.taxas;
}

public void setTaxas(float taxas) {
	this.taxas = taxas;
}

@Column(name = "desconto")
public float getDesconto() {
	return this.desconto;
}

public void setDesconto(float desconto) {
	this.desconto = desconto;
}

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "carros_codigo")
public Carros getCarro() {
	return this.carro;
}

public void setCarro(Carros carro) {
	this.carro = carro;
}

@Column(name = "dinheiro")
public float getAvista() {
	return this.avista;
}

public void setAvista(float avista) {
	this.avista = avista;
}

@Column(name = "cheque")
public float getAcheque() {
	return this.acheque;
}

public void setAcheque(float acheque) {
	this.acheque = acheque;
}

@Column(name = "cartao")
public float getCartao() {
	return this.cartao;
}

public void setCartao(float cartao) {
	this.cartao = cartao;
}

@Column(name = "promissoria")
public float getPromissoria() {
	return this.promissoria;
}

public void setPromissoria(float promissoria) {
	this.promissoria = promissoria;
}

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "cliente_codigo")
public Cliente getCliente() {
	return this.cliente;
}

public void setCliente(Cliente cliente) {
	this.cliente = cliente;
}

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "lojas_codigo")
public Lojas getLoja() {
	return this.loja;
}

public void setLoja(Lojas loja) {
	this.loja = loja;
}

}[/code]

ok Hammer no seu mapeamento de cheque você mapeou
@ManyToOne(cascade = CascadeType.ALL) com relação a serviço, tudo certo até ai, qualquer crud vai ser feito em casacata, mas verifique se na hora que você esta consultando cheque se ele esta trazendo o objeto servico, pois quando mandar excluir ele tentara apagar serviço também.

ele tenta excluir servico mesmo, como faco para excluir so o xeque e nao o servico?

Olhe no seu mapeamento de cheques, no objeto referente a serviço esta mapeado para fazer tudo em cascata, ou seja consulta, update, delete.
@ManyToOne(cascade = CascadeType.ALL).

Modifique o CascadeType.

obg pela ajuda q vc esta me dando, mas sou meio novato em java, quals eria esse tipo q na hora de remover removese so o cheque e deixasse o servico q eles esta ligado intacto?

existe varios tipos, PERSIST, MERGE, REMOVE, REFRESH e ALL geralmente sua IDE fornece os tipo com ctrl + backspace.

ou de uma olhada aqui.
http://rfiume.blogspot.com/2007/04/relacionamento-one-to-one-entre.html

obg pela ajuda, escolhi isso: fetch = FetchType.EAGER

e esta funcionando do jeito q gostaria, remove so o cheque e nada mais, o servico fica do mesmo jeito

mas pode ocorrer problemas mais tarde?

Hammer acredito que não ocorra problemas, mas depende da forma que esta tratando o banco.
Não gerando inconsistencias, você pode mapear do jeito que quiser.