From f6c7883e5f6328f7fb78b156d55888264f8d41d8 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 26 Feb 2023 15:56:47 +0100
Subject: [PATCH] #728 - fixed transactions specifications for tags

---
 .../transactions/TransactionSpecifications.java   | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

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 76f7b85a8..b6f443ace 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)
-- 
GitLab