Dbの列が空の文字列またはnullでないかどうかを確認しようとしていますが、実際のオブジェクトを取得するために条件ビルダークエリでそれを行う方法を理解できません。このsqlは機能します。
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[]{}));
それでもリスト全体を返します。
以下でお試しください
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));
このコードを使用してみてください:
criteriaBuilder.isNotNull(model.get(entity.name))
2つの式が等しくないことをテストする基準ビルダー「notEqual」基準。何かを見落とさない限り、null値をフィルタリングする基準を確認できません。
「where」句でpredicates.toArray(new Predicate[predicates.size()]
を試して、それが機能するかどうかを確認します。 List
をArray
に変換するときは、空の配列を渡すため、サイズを0に指定します。