Skip to content

Instantly share code, notes, and snippets.

@josergdev
Last active October 6, 2024 21:54
Show Gist options
  • Select an option

  • Save josergdev/c327bb9569a6c891e7d4e21c01a2f719 to your computer and use it in GitHub Desktop.

Select an option

Save josergdev/c327bb9569a6c891e7d4e21c01a2f719 to your computer and use it in GitHub Desktop.
CriteriaBuilder extension fort tuples IN feature
package dev.joserg.jpa;
import java.util.List;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Expression;
import jakarta.persistence.criteria.Predicate;
public class CriteriaBuilderExtension {
private final CriteriaBuilder criteriaBuilder;
public CriteriaBuilderExtension(CriteriaBuilder criteriaBuilder) {
this.criteriaBuilder = criteriaBuilder;
}
public Predicate tuplesIn(final List<? extends Expression<Object>> tuplePath, final List<List<Object>> tupleValues) {
final var leftIn = this.criteriaBuilder.function("", Object.class, tuplePath.toArray(new Expression[0]));
final var rightIn = tupleValues.stream()
.map(tupleValue -> {
final var values = tupleValue.stream().map(this.criteriaBuilder::literal).toList();
return this.criteriaBuilder.function("", Object.class, values.toArray(new Expression[0]));
})
.toArray();
return leftIn.in(rightIn);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment