web-dev-qa-db-ja.com

Java条件ビルダークエリがnullまたは空ではありません

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[]{}));

それでもリスト全体を返します。

5
Crystal

以下でお試しください

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));
2
Tom Taylor

このコードを使用してみてください:

criteriaBuilder.isNotNull(model.get(entity.name))
8
gfxfunclub

2つの式が等しくないことをテストする基準ビルダー「notEqual」基準。何かを見落とさない限り、null値をフィルタリングする基準を確認できません。

0
fabfas

「where」句でpredicates.toArray(new Predicate[predicates.size()]を試して、それが機能するかどうかを確認します。 ListArrayに変換するときは、空の配列を渡すため、サイズを0に指定します。

0
VHS