Olá estou começando com jpa pulei para o 2 nunca usei o hibernate.
Tive vários problemas
1º- Usar o LIKE em vez do = para usar o %. Objetivo é retrnar uma lista de pessoas usando ajax, a pessoa digita e a lista vai cendo criada.
No seu caso 2, se o campo é not null, e está vindo null para a busca, significa que o usuário não forneceu o valor para a busca, logo vc não adiciona o filtro para esse campo.
O problema é causado por outro problema como tem muita forma de fazer tanto jpa ou hibernate ou eclipselink, cada busca na internet é diferente.
O criteria.add nem aparece para min, mas aparece cb.like, mas dá erro, pois o padrão é (Expression<java.lang.String> x,Expression<java.lang.String> pattern) ou Expression<java.lang.String> x, java.lang.String pattern) ou Expression<java.lang.String> x,Expression<java.lang.String> pattern), char charscape) e mais alguns com variasões dos que coloquei.
Só para informar os imports que uso é são javax.persistence…*;
Cara não sei se fui claro, mais o Restrictions que aparece é do hibernate. se eu colocar cb do código acima tem que usar os padrões que informei.
Bom reolve o problema do like usando nem sei o que é se é metamodel ou jpa api mesm, mas pesquisando encontrei um site que por bondade do cara não mostrou somente o codigo crebado, mas adicionou um exemplo que funcionou.O link http://blogs.sun.com/Lance/entry/generating_the_jpa_2_0
Tava me complicando com Expression e SingleAttribute da forma que fiz deu certo e retornou corretamente.