Chave composta - JPA [resolvido]

Pessoal,

Estou com esse erro aqui could not set a field value by reflection setter of br.gov.cemaden.bean.AlertaLocalidadePK.idalerta

Ele não consegue settar o objeto
@EmbeddedId
private AlertaLocalidadePK alertaLocalidadePK;

Não sei mais o que fazer…pra mim só o fato da anotação @EmbeddedId e @MapsId(“alerta”) ele já entenderia a classe PK e as colunas.

Segue minhas classes, se alguém puder ajudar desde já muito obrigado :wink:

AlertaLocalidade.java

@Entity
@Audited
@Table(name="alt_alerta_localidade", schema = "public")
@SequenceGenerator(name = "sequence", sequenceName = "public.alerta_localidade_sequence", schema="public")
public class AlertaLocalidade {
	
	@EmbeddedId
	private AlertaLocalidadePK alertaLocalidadePK;
	
	@MapsId("idalerta")
	@ManyToOne
	private Alerta alerta;
	
	@MapsId("idlocalidade")
	@ManyToOne
	private Localidade localidade;
	
	@ManyToOne
	@JoinColumn(name="id_nivel", referencedColumnName = "id_nivel")
	private Nivel nivel;
	
	@ManyToOne
	@JoinColumn(name="id_evento", referencedColumnName = "id_evento")
	private Evento evento;

AlertaLocalidadePK

@Embeddable
public class AlertaLocalidadePK implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	public AlertaLocalidadePK(){
		
	}

	@Column(name = "id_alerta", nullable = false)
	private Long idalerta;
	
	@Column(name = "id_localidade", nullable = false)
	private Long idlocalidade;

VersaoController

@Restrito
	@Post
	@Path("/versao/novo")
	public void cadastraAlerta(Alerta alerta, Versao versao, VersaoImagem versaoimagem, AlertaLocalidade al, Nivel nivel, Evento evento, Localidade localidade){
		
		alerta = dao.insere(alerta);//adicionando na tabela alerta
		
		versao.setAlerta(alerta);//setando os valores para a tabela versão
		versao = vdao.insere(versao);//adicionando na tabela versao
		
		versaoimagem.setVersao(versao);
		versaoimagem = vidao.insere(versaoimagem);//adicionando na tabela versao_imagem
		
		//setando os valores para a tabela AlertaLocalidade
		al.setAlerta(alerta);
		al.setLocalidade(localidade);
		al.setNivel(nivel);
		al.setEvento(evento);
		//adicionando na tabela alerta_localidade
		al = aldao.insere(al);
		
	}

Resolvido!

Na classe AlertaLocalidade eu deixei apenas o atributo PK anotado com @EmbeddedId

@Entity
@Audited
@Table(name="alt_alerta_localidade", schema = "public")
@SequenceGenerator(name = "sequence", sequenceName = "public.alerta_localidade_sequence", schema="public")
public class AlertaLocalidade {

	public AlertaLocalidade() {
		
	}

	public AlertaLocalidade(AlertaLocalidadePK alertaLocalidadePK, Nivel nivel,	Evento evento) {
		super();
		this.alertaLocalidadePK = alertaLocalidadePK;
		this.nivel = nivel;
		this.evento = evento;
	}

	@EmbeddedId
	private AlertaLocalidadePK alertaLocalidadePK;

	@ManyToOne
	@JoinColumn(name="id_nivel", referencedColumnName = "id_nivel")
	private Nivel nivel;
	
	@ManyToOne
	@JoinColumn(name="id_evento", referencedColumnName = "id_evento")
	private Evento evento;

e na classe AlertaLocalidadePK eu anotei com @Column os dois atributos chave

@Embeddable
public class AlertaLocalidadePK implements Serializable {
	
	private static final long serialVersionUID = 1L;

	public AlertaLocalidadePK(){
		
	}
	
	public AlertaLocalidadePK(Long idalerta, Long idlocalidade) {
		super();
		this.idalerta = idalerta;
		this.idlocalidade = idlocalidade;
	}

	@Column(name = "id_alerta", nullable = false)
	private Long idalerta;
	
	@Column(name = "id_localidade", nullable = false)
	private Long idlocalidade;