2016-12-05 2 views
1

Я пытаюсь проверить, не является ли столбец в db пустой строкой или не является нулевым, но я не могу понять, как это сделать с запросами построителя критериев, чтобы получить фактические объекты назад. Это SQL работает:Запрос строителя критериев Java не пустой или пустой

sampleName is not null and sampleName != '' 

Но когда я пытаюсь сделать это с критериями строителя, как это:

// это в частном методе filterBySampleNotEmpty

cb.notEqual(root.get("sampleName"), ""); 

называют это в другом методе

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); 
CriteriaQuery<Sample> query = criteriaBuilder.createQuery(Sample.class); 
Root model = query.from(Sample.class); 
List<Predicate> predicates = new ArrayList<>(); 
predicates.add(filterBySampleNotEmpty(model, criteriaBuilder)); 
query.select(model).where(predicates.toArray(new Predicate[]{})); 

Он возвращает весь список еще.

+0

Можете ли вы показать немного больше кода? Как вы создали/сконфигурировали cb и root? –

+0

@ EddieCurtis Неплохо, я добавил еще. – Crystal

+0

В предложении 'where' вы можете попробовать 'predicates.toArray (новый Predicate [predicates.size()]' и посмотреть, работает ли это? – VHS

ответ

1

Пожалуйста, сделайте попытку со следующим

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); 
CriteriaQuery<Sample> query = criteriaBuilder.createQuery(Sample.class); 
MetaModel m = em.getMetaModel(); 
EntityType<Sample> entity = m.entity(Sample.class); 
Root model = query.from(Sample.class); 
query.where(criteriaBuilder.notEqual(model.get(entity.name), “”)).and(criteriaBuilder.notEqual(model.get(entity.name), null)); 
+0

notEqual не может быть вызван по запросу. – Crystal

+0

Да, ошибся @Crystal .. notEquals должен быть на 'CriteriaBuilder' отредактировал мой ответ, пожалуйста, проверьте то же самое – lsof

+0

Пожалуйста, обратитесь к следующему java doc https://docs.oracle. com/cd/E19798-01/821-1841/gjixa/index.html - узнать больше .. – lsof

0

Критерии строителя "notEqual" критерии тестирования, что два выражения не равны. Я не вижу критериев для фильтрации нулевого значения, если я не пропустил что-то.

+0

да, я сначала пытался использовать пустую строку, но не мог заставить ее работать. – Crystal

0

В предложении «где» попробуйте predicates.toArray(new Predicate[predicates.size()] и посмотрите, работает ли это. При преобразовании List в Array, вы указываете размер как 0, так как передача пустого массива.

0

Попробуйте использовать этот код:

criteriaBuilder.isNotNull(model.get(entity.name)) 
+1

Попробуйте чтобы дать вам немного больше контекста в вашем ответе. См. [здесь] (https://stackoverflow.com/help/how-to-answer) – SilverNak

Смежные вопросы