Erro value is not valid em selectOneRadio

tenho um dataTable carregado com diversos valores sendo que cada um deles possui um selectOneRadio para que seja selecionado…
seleciono 1 e salvo, mas após o submit, ao selecionar outro valor e mandar salvar ocorre um erro de validação nativo do componete: value is not valid…
Já implementei o equals e hashcode no objeto correspondente mas persiste o erro… Alguém pode dar uma outra solução?

dataTable que contém o selectOneRadio

<rich:dataTable
								onRowMouseOver="this.style.backgroundColor='#C5DCC5'"
								onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
								width="97%" border="0" cellpadding="0" id="tablePromocoes"
								value="#{eventoPromocaoControle.listaPromocao}" var="promocao"
								rowClasses="cursorPointer">

								<f:facet name="header">

									<rich:columnGroup>
										
										<rich:column colspan="1">  	   
		  								</rich:column>
										
										<rich:column colspan="1">
											<h:outputText value="Tipo da Promoção" />
										</rich:column>

										<rich:column colspan="1">
											<h:outputText value="Posto/Grad" />
										</rich:column>

										<rich:column colspan="1">
											<h:outputText value="Data da Promoção" />
										</rich:column>
										
										<rich:column colspan="1">
											<h:outputText value="Documento de Promoção" />
										</rich:column>
									</rich:columnGroup>
								</f:facet>

		  						
		  						<rich:column>

                                	<h:selectOneRadio  id="radioPromocao" value="#{promocao}" onclick="return dataTableSelectOneRadio(this);">
                                		 <f:selectItem itemValue="#{promocao.selecionado}"/>
                                		 <a4j:support event="onchange" action="#{eventoPromocaoControle.selecionaPromocao(promocao)}" />
                                	</h:selectOneRadio>
                            	</rich:column>
								
								<rich:column>
									<h:outputText value="#{promocao.tipoPromocao.descricao}" />
								</rich:column>

								<rich:column>
									<h:outputText
										value="#{promocao.promocaoId.postoGradEspec.descricao}" />
								</rich:column>

								<rich:column>
									<h:outputText value="#{promocao.dtPromocao}" />
								</rich:column>
								
								<rich:column>
									<h:outputText value="#{promocao.docPromocao}" />
								</rich:column>
							</rich:dataTable>

Objeto Promocao.java

package br.mil.eb.dgp.sirf3.negocio.entidade.promocao;

import java.util.Date;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.annotations.Type;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.validator.NotNull;
import org.jboss.seam.annotations.Name;

import br.mil.eb.dgp.sirf3.negocio.entidade.militar.Militar;
import br.mil.eb.dgp.sirf3.negocio.entidade.militar.PostoGradEspec;
import br.mil.eb.dgp.sirf3.negocio.entidade.organizacaoexercito.Orgao;
import br.mil.eb.dgp.sirf3.negocio.enums.TipoPromocao;

@Entity
@Table(name = "PROMOCAO", schema = "RH_QUADRO")
@Name(value="promocao")
public class Promocao {

	@EmbeddedId
	@AttributeOverrides( {
			@AttributeOverride(name = "militar", column = @Column(name = "MIL_PES_IDENTIFICADOR_COD", nullable = false)),
			@AttributeOverride(name = "postoGradEspec", column = @Column(name = "POSTO_GRAD_CODIGO", nullable = false)),
			@AttributeOverride(name = "dtPromocao", column = @Column(name = "DT_PROMOCAO", nullable = false)) })
	@NotNull
	private PromocaoId promocaoId;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "MIL_PES_IDENTIFICADOR_COD",insertable=false, updatable=false)
	private Militar militar;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "POSTO_GRAD_CODIGO",insertable=false, updatable=false)
	private PostoGradEspec postoGradEspec;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "DT_PROMOCAO", length = 7,insertable=false, updatable=false)
	private Date dtPromocao;
	
	@Column(name="TIPO_PROMOCAO")
	@Type(type="br.mil.eb.dgp.sirf3.negocio.enums.TipoPromocao")
	private TipoPromocao tipoPromocao;
	
	@Column(name = "DOC_PROMOCAO")
	private String docPromocao;

	@Column(name = "PUBL_ADT")
	private String publAdt;	
	
	@Temporal(TemporalType.DATE)
	@Column(name = "DT_DOC_PROMOCAO", length = 7)
	private Date dtDocPromocao;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "ORGAO_CODIGO")
	private Orgao orgao;
	
	@Column(name = "TITULO_IDT_CODIGO")
	private Integer tituloIdtCodigo;
	
	@Column(name = "DOC_TIPO_IDT")
	private String docTipoIdt;
	
	@Column(name = "INDEVIDA")
	private String indevida;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "DT_DOC_PROMOCAO_IDT", length = 7)
	private Date dtDocPromocaoIdt;
	
	@Transient
	private EventoPromocao eventoPromocao;
	
	@Transient
	private boolean selecionado;

	public PromocaoId getPromocaoId() {
		return promocaoId;
	}

	public void setPromocaoId(PromocaoId promocaoId) {
		this.promocaoId = promocaoId;
	}

	public TipoPromocao getTipoPromocao() {
		return tipoPromocao;
	}

	public void setTipoPromocao(TipoPromocao tipoPromocao) {
		this.tipoPromocao = tipoPromocao;
	}

	public String getDocPromocao() {
		return docPromocao;
	}

	public void setDocPromocao(String docPromocao) {
		this.docPromocao = docPromocao;
	}

	public String getPublAdt() {
		return publAdt;
	}

	public void setPublAdt(String publAdt) {
		this.publAdt = publAdt;
	}

	public Date getDtDocPromocao() {
		return dtDocPromocao;
	}

	public void setDtDocPromocao(Date dtDocPromocao) {
		this.dtDocPromocao = dtDocPromocao;
	}

	public Orgao getOrgao() {
		return orgao;
	}

	public void setOrgao(Orgao orgao) {
		this.orgao = orgao;
	}

	public Integer getTituloIdtCodigo() {
		return tituloIdtCodigo;
	}

	public void setTituloIdtCodigo(Integer tituloIdtCodigo) {
		this.tituloIdtCodigo = tituloIdtCodigo;
	}

	public String getDocTipoIdt() {
		return docTipoIdt;
	}

	public void setDocTipoIdt(String docTipoIdt) {
		this.docTipoIdt = docTipoIdt;
	}

	public String getIndevida() {
		return indevida;
	}

	public void setIndevida(String indevida) {
		this.indevida = indevida;
	}

	public Date getDtDocPromocaoIdt() {
		return dtDocPromocaoIdt;
	}

	public void setDtDocPromocaoIdt(Date dtDocPromocaoIdt) {
		this.dtDocPromocaoIdt = dtDocPromocaoIdt;
	}

	public EventoPromocao getEventoPromocao() {
		return eventoPromocao;
	}

	public void setEventoPromocao(EventoPromocao eventoPromocao) {
		this.eventoPromocao = eventoPromocao;
	}

	public Militar getMilitar() {
		return militar;
	}

	public void setMilitar(Militar militar) {
		this.militar = militar;
	}

	public PostoGradEspec getPostoGradEspec() {
		return postoGradEspec;
	}

	public void setPostoGradEspec(PostoGradEspec postoGradEspec) {
		this.postoGradEspec = postoGradEspec;
	}

	public Date getDtPromocao() {
		return dtPromocao;
	}

	public void setDtPromocao(Date dtPromocao) {
		this.dtPromocao = dtPromocao;
	}

	
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((promocaoId == null) ? 0 : promocaoId.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if(obj.getClass().getName().toLowerCase().contains("javassist")){
			obj = (Object) ((HibernateProxy) obj)
			.getHibernateLazyInitializer().getImplementation();
		}
		if (getClass() != obj.getClass())
			return false;
		Promocao other = (Promocao) obj;
		if (promocaoId == null) {
			if (other.promocaoId != null)
				return false;
		} else if (!promocaoId.equals(other.promocaoId))
			return false;
		return true;
	}

	public boolean isSelecionado() {
		return selecionado;
	}

	public void setSelecionado(boolean selecionado) {
		this.selecionado = selecionado;
	}
	
}