diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSpecifications.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSpecifications.java index 76f7b85a889995755ba8735624a5f5412d411a90..b6f443aceffc89a78fd9c35d54126474073d2d62 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSpecifications.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSpecifications.java @@ -10,6 +10,7 @@ import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.Join; import jakarta.persistence.criteria.JoinType; import jakarta.persistence.criteria.Predicate; + import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -102,17 +103,21 @@ public class TransactionSpecifications if(!tagIDs.isEmpty()) { Join<Transaction, Tag> join = transaction.join(Transaction_.tags, JoinType.LEFT); - Predicate tagPredicate = builder.disjunction(); + final List<Predicate> tagPredicates = new ArrayList<>(); + for(Integer tagID : tagIDs) { - tagPredicate.getExpressions().add(builder.equal(join.get(Tag_.ID), tagID)); + tagPredicates.add(builder.equal(join.get(Tag_.ID), tagID)); } // transactions without any tags should be included in results - tagPredicate.getExpressions().add(builder.isEmpty(transaction.get(Transaction_.tags))); + tagPredicates.add(builder.isEmpty(transaction.get(Transaction_.tags))); + + final Predicate[] predicatesArray = new Predicate[tagPredicates.size()]; + final Predicate tagPredicatesCombined = builder.or(tagPredicates.toArray(predicatesArray)); - predicates.add(tagPredicate); - transferPredicates.add(tagPredicate); + predicates.add(tagPredicatesCombined); + transferPredicates.add(tagPredicatesCombined); } if(name != null && name.length() > 0)