JPA retornando Object diferente do tipo de objeto da classe

Boa noite,
A seguinte query retorna java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to br.com.satisfacer.model.Cliente

public List<Cliente> teste(Cliente cliente) {
    return manager.createQuery("from Cliente c join c.compras e where e.dataUltimaCompra > '01.08.2018'")
            .setMaxResults(100).getResultList();
}

Minha Bean

@SessionScoped
@Named
public class EmailModuleBean implements Serializable {
    private static final long serialVersionUID = 1L;

    @Inject
    private ClientePU clientePU;

    public void testes() {
        for (Cliente c : clientePU.teste(new Cliente())) {
            System.out.println(c.getNome());
        }
    }
}

Meu model:

@javax.persistence.Entity
@Table(name = "clientes")
public class Cliente implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "cod_cliente")
    private Long codigo;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "cod_profissao", referencedColumnName = "cod_profissao")
    private ClienteProfissao profissao;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cliente")
    private List<Compra> compras = new ArrayList<>();

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "cod_cliente", referencedColumnName = "cod_cliente")
    @NotFound(action = NotFoundAction.IGNORE)
    private ClienteOutrosDados outrosDados;

Nao sou especialista em JPA mas acredito que sua query está retornando dois tipos de objetos (clientes e compras) pois você está fazendo um join.

A soluçao exata vai depender de como implementar em JPA, mas seria na linha:

  • Selecionar apenas o cliente para retornar (algo como select c from client c join....)
  • Transformar o join numa subquery usando compras.

Resolvido, ficou assim

return manager
				.createQuery(
						"select c from Cliente c join c.compras e where e.dataUltimaCompra > '24.08.2018' ORDER BY e.dataUltimaCompra DESC")
				.setMaxResults(10).getResultList();