Hibernate -> row not found

Tenho uma classe maldita que quando passada a um EJB que apenas executa um s.saveOrUpdate(objeto) me retorna o erro:

Alguem ja teve esse maldito problema?

[net.sf.hibernate.SQL] update cliente_cartao set nro_cartao=? where cod_cliente=? and cod_tipo=?
Hibernate: update cliente_cartao set nro_cartao=? where cod_cliente=? and cod_tipo=?
[net.sf.hibernate.impl.BatcherImpl] preparing statement
[net.sf.hibernate.persister.EntityPersister] Dehydrating entity:
 [ClienteCartao#ClienteCartaoPK@bed2ef6]
[net.sf.hibernate.type.StringType] binding '123456' to parameter: 1
[net.sf.hibernate.type.IntegerType] binding '200093428' to parameter: 2
[net.sf.hibernate.type.IntegerType] binding '2' to parameter: 3
[net.sf.hibernate.impl.SessionImpl] Could not synchronize database state with session
net.sf.hibernate.HibernateException: SQL insert, update or delete failed (row not found)

ClienteCartao.java

package entidades;

import java.io.Serializable;

/**
 * @hibernate.class table = "cliente_cartao" 
 */

 public class ClienteCartao implements Serializable {
 	
 	private ClienteCartaoPK id;
 	private String numero;
 	//private TipoCartao bandeira;

	/**
	 * @hibernate.id 	column = "id"
	 * 					type = "ClienteCartaoPK"
	 */
	public ClienteCartaoPK getId() {
		return id;
	}

	/**
	 * @param id The id to set.
	 */
	public void setId(ClienteCartaoPK id) {
		this.id = id;
	}

	/**
	 * @hibernate.property 	column = "nro_cartao" 
	 * 						type = "java.lang.String" 
	 * 						not-null = "true"
	 */
	public String getNumero() {
		return numero;
	}

	/**
	 * @param numero The numero to set.
	 */
	public void setNumero(String numero) {
		this.numero = numero;
	}

	/**
	 * @hibernate.many-to-one 	column = "cod_tipo"
	 * 							class = "TipoCartao"
	 * 							insert = "false"
	 * 							update = "false"
	 */
	/*
	public TipoCartao getBandeira() {
		return bandeira;
	}
*/
	/**
	 * @param bandeira The bandeira to set.
	 */
	/*
	public void setBandeira(TipoCartao bandeira) {
		this.bandeira = bandeira;
	}
	*/
    /*
     * (non-Javadoc)
     * 
     * @see java.lang.Object#hashCode()
     */
    public int hashCode() {
        return (int) (this.id.getCodigoCliente() + this.getId().getTipo());
    }

    /*
     * (non-Javadoc)
     * 
     * @see java.lang.Object#equals(java.lang.Object)
     */
    public boolean equals(Object obj) {
        if (obj instanceof ClienteCartao) {
        	ClienteCartao c = (ClienteCartao) obj;
            if (this.id.hashCode() == 0 ? c.id.hashCode() == 0 : this.id.hashCode() == c.id.hashCode()) {
                return true;
            }
        }
        return false;
    }
}

ClienteCartaoPK

package entidades;

import java.io.Serializable;

public class ClienteCartaoPK implements Serializable {

 	private int codigoCliente;
 	private int tipo;
	
	/**
	 * @hibernate.property 		column = "cod_cliente"
	 * 							type = "int"
	 * 							not-null = "true"
	 */

	public int getCodigoCliente() {
		return codigoCliente;
	}
	/**
	 * @param codigoCliente The codigoCliente to set.
	 */
	public void setCodigoCliente(int codigoCliente) {
		this.codigoCliente = codigoCliente;
	}
	/**
     * @hibernate.property 		column = "cod_tipo"
     *  						type = "int"
     * 							not-null = "true" 
	 */
	public int getTipo() {
		return tipo;
	}
	/**
	 * @param tipo The tipo to set.
	 */
	public void setTipo(int tipo) {
		this.tipo = tipo;
	}
	
    /*
     * (non-Javadoc)
     * 
     * @see java.lang.Object#hashCode()
     */
    public int hashCode() {
        return (int) (this.getCodigoCliente() + this.getTipo());
    }

    /*
     * (non-Javadoc)
     * 
     * @see java.lang.Object#equals(java.lang.Object)
     */
    public boolean equals(Object obj) {
        if (obj instanceof ClienteCartaoPK) {
        	ClienteCartaoPK c = (ClienteCartaoPK) obj;
            if (this.hashCode() == 0 ? c.hashCode() == 0 : this.hashCode() == c.hashCode()) {
                return true;
            }
        }
        return false;
    }
	
}

ClienteCartao.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping
>
    <class
        name="entidades.ClienteCartao"
        table="cliente_cartao"
        dynamic-update="false"
        dynamic-insert="false"
        select-before-update="false"
        optimistic-lock="version"
    >

        <composite-id
            name="id"
            class="entidades.ClienteCartaoPK"
        >
                     <key-property
                        name="codigoCliente"
                        type="int"
                        column="cod_cliente"
                />

                     <key-property
                        name="tipo"
                        type="int"
                        column="cod_tipo"
                />

        </composite-id>

        <property
            name="numero"
            type="java.lang.String"
            update="true"
            insert="true"
            access="property"
            column="nro_cartao"
            not-null="true"
        />

        <!--
            To add non XDoclet property mappings, create a file named
                hibernate-properties-ClienteCartao.xml
            containing the additional properties and place it in your merge dir.
        -->

    </class>

</hibernate-mapping>

mas tem certeza q deveria ser um UPDATE?
e o registro (q ele filtra no where) existe?

Nao deveria ser um update e sim um insert pois este registro (esse cliente ainda nao tem nenhum cartao com esse tipo no banco) logo eu acho que o hibernate deveria dar um insert e nao tentar dar um update correto?

Se eu coloco um select-before-update na classe ClienteCartao ele me retorna o erro:

09:16:47,375 INFO  [STDOUT] Hibernate: select cod_cliente, cod_tipo, nro_cartao from 
cliente_cartao where cod_cliente =? and cod_tipo =?
09:16:47,843 WARN  [StaleObjectStateException] An operation failed due to stale data 
net.sf.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction 
(or unsaved-value mapping was incorrect) for 
entidades.ClienteCartao instance with identifier: entidades.ClienteCartaoPK@bed2ef6