Problemas com Join no JPA

Estou tentando executar o seguinte comando sql no jpa.

@NamedQueries( { @NamedQuery(name = "HistServico.busca1", query = "SELECT hs FROM HistoricoServico AS hs JOIN hs.agenda AS a WHERE a.animal = :codAnimal") })

este é comando que eu executo para chamar o sql:

Query q = em.createNamedQuery("HistServico.busca1");
		
		q.setParameter("codAnimal",pedeAnimal.getValue().getCodAnimal());

Dentro da entidade HistoricoServico tenho um join column para agenda atendimento

@ManyToOne(cascade = CascadeType.ALL) @JoinColumns(@JoinColumn(name="CODAGENDA",referencedColumnName="CODAGENDA")) private AgendaAtendimento agenda;

Na entidade Agenda Atendimento eu tenho um Join column que aponta para a entidadade animal:

public static final String ANIMAL = "animal"; @OneToOne(cascade = CascadeType.ALL) @JoinColumns ({ @JoinColumn(name="CODANIMAL", referencedColumnName = "CODANIMAL") }) @ValidadorCampo(podeNull = false) private Animal animal;

Mas quando eu filtro pelo código do animal ele me retorna o seguinte erro:

Erro:
java.lang.IllegalArgumentException: You have attempted to set a value of type class java.lang.Integer for parameter codAnimal with expected type of class br.com.mmsistemas.petshop.entidades.Animal from query string SELECT hs FROM HistoricoServico AS hs JOIN hs.agenda AS a WHERE a.animal = :codAnimal.

Sua query recebe um Animal e você está passando está passando um Integer.

Sim, mas e o joincolumns, não seria para referencia o cód do animal? então neste caso eu deveria usar o que?

acho que já sei o meu problema… eu tenho teque passar animal.getcodAnimal(), deve ser isso… ou não?

Isso está dizendo ao Hibernate que eles se relacionam por meio daquelas colunas, não que você vai usá-las. Se você vai usar ids, então pra que um ORM?