Problema com JSF + Hibernate 3

Olá pessoal,

Estou iniciando o desenvolvimento de uma aplicação, e estou usando JSF (Myfaces 1.2.2 + Tomahawk 1.1.8) + Hibernate 3.2 (com annotations), e estou passando por uma dificuldade, que já tentei pesquisar, e até encontrei algumas possíveis soluções, mas nenhuma resolveu o meu problema.

Eu tenho 2 classes modelo: Veiculo e Categoria, em veiculo eu coloquei um relacionamento @ManyToOne em Veiculo, e na tabela existe um campo categoria_id. Até ai tudo certo, eu montei uma tela que lista os registros da tabela veiculo e outra para editar os dados, quando tento alterar o relacionamento de Veiculo x Categoria, eu tenho o erro baixo:

HibernateException: identifier of an instance of was altered from 3 to 1

As minhas classes estão desta forma:

@Entity
@Proxy(lazy=true)
public class Veiculo implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue 
    private Long id;
    @Column
    private Integer niVeiculo;
    @JoinColumn(name = "categoria_id", referencedColumnName = "id" ,  insertable = false, updatable = false) 
    @ManyToOne
    private Categoria categoria;
    @Column(length = 50)
    private String marca;
    @Column(length = 50)
    private String modelo;
    @Column
    private Integer anoFabric;
    @Column
    private Integer anoModelo;
    @Column(length = 20)
    private String ipvaMes;
    @ManyToOne
    private TipoCombustivel tipoCombustivel;
    @Column(length = 8)
    private String placaAnt;
    @Column(length = 8)
    private String placaAtual;
    @Column
    private Short potencia;
    @Column(length = 15)
    private String cor;
    @Column(length = 10)
    private String renavan;
    @Column(length = 30)
    private String chassi;
    @Column
    private Short maxPassageiros;
    @Column
    private Short capacidTanque;
    @Column
    private Timestamp dataAquisicao;
    @ManyToOne
    private TipoAquisicao tipoAquisicao;
    @Column(length = 25)
    private String nomeFornecedor;
    @Column(precision = 10, scale = 2)
    private BigDecimal valorAquisicao;
    @Column(precision = 10, scale = 2)
    private BigDecimal valorMercado;
    @Column(name = "licenciamento_data")
    private Timestamp licenciamentoData;
    @Column(precision = 10, scale = 2)
    private BigDecimal licenciamentoValor;
    @ManyToOne
    private EstadoVeiculo estado;

    public Veiculo() {
    }

   //  +++ GETS E SETS ++++
}
@Entity
@Proxy(lazy = true)
public class Categoria{
	@Id
	@GeneratedValue
	private Long id;
	@Column(length = 50)
	private String descricao;
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public Long toLong(){
		return getId();
	}
	public String toString(){
		return String.valueOf(getId());
	}
}

O método que salva, no controlador é este:

	public String salva() {
		VeiculoDao dao = new VeiculoDao();
		HibernateTransactionUtil.beginCurrentTransaction();
		try {
			Categoria categoria = (Categoria) dao.recuperaPorId(veiculo.getCategoria().getId(), Categoria.class);
			veiculo.setCategoria(categoria);
			dao.salva(veiculo, veiculo.getId());
		} catch (Exception e) {
			System.out.println(e);
		}
		try {
			HibernateTransactionUtil.commitCurrentTransaction();
		} catch (Exception e) {
			System.out.println(e);
			HibernateTransactionUtil.rollbackCurrentTransaction();
		}
		return "ListaVeiculos";
	}

e no DAO:

    public void salva(Object objectTO, Long idValue) {
        Session session = getCurrentSession();
        try {
        	session.save(objectTO);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

Alguem já passou por problema semelhante, ou saberia me dizer alguma coisa a respeito deste erro?

Ah, ele ocorre na hora do commit.

Obrigado!!!