Esta API é muito complicada, muito mais fácil fazer a mesma consulta no próprio SQL...
Uma sugestão seria usando um between nvl ou like %:
Exemplo:
Select p 
  from Produtos p
where p.nome like '%'||:nome||'%'
    and p.data between nvl(:data, '01/01/2000') and nvl(:data, '31/12/2100')PS: Nao testei para ver se o NVL funciona no JPQL
 
            