Browse Source

Implement equals and hashCode for Criteria.

This facilitates testing of Criteria construction and is also usful, when keeping Criteria instances in sets or similar.

Closes #1960
pull/1962/head
Jens Schauder 1 year ago
parent
commit
721a7ad458
No known key found for this signature in database
GPG Key ID: 74F6C554AE971567
  1. 23
      spring-data-relational/src/main/java/org/springframework/data/relational/core/query/Criteria.java
  2. 28
      spring-data-relational/src/test/java/org/springframework/data/relational/core/query/CriteriaUnitTests.java

23
spring-data-relational/src/main/java/org/springframework/data/relational/core/query/Criteria.java

@ -21,6 +21,7 @@ import java.util.Collections; @@ -21,6 +21,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.StringJoiner;
import org.springframework.dao.InvalidDataAccessApiUsageException;
@ -390,6 +391,28 @@ public class Criteria implements CriteriaDefinition { @@ -390,6 +391,28 @@ public class Criteria implements CriteriaDefinition {
return builder.toString();
}
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) {
return false;
}
Criteria criteria = (Criteria) o;
return ignoreCase == criteria.ignoreCase //
&& Objects.equals(previous, criteria.previous) //
&& combinator == criteria.combinator //
&& Objects.equals(group, criteria.group) //
&& Objects.equals(column, criteria.column) //
&& comparator == criteria.comparator //
&& Objects.equals(value, criteria.value);
}
@Override
public int hashCode() {
return Objects.hash(previous, combinator, group, column, comparator, value, ignoreCase);
}
private void unroll(CriteriaDefinition criteria, StringBuilder stringBuilder) {
CriteriaDefinition current = criteria;

28
spring-data-relational/src/test/java/org/springframework/data/relational/core/query/CriteriaUnitTests.java

@ -22,7 +22,6 @@ import static org.springframework.data.relational.core.query.Criteria.*; @@ -22,7 +22,6 @@ import static org.springframework.data.relational.core.query.Criteria.*;
import java.util.Arrays;
import org.junit.jupiter.api.Test;
import org.springframework.data.relational.core.sql.SqlIdentifier;
/**
@ -297,4 +296,31 @@ class CriteriaUnitTests { @@ -297,4 +296,31 @@ class CriteriaUnitTests {
assertThat(criteria.getComparator()).isEqualTo(CriteriaDefinition.Comparator.IS_FALSE);
assertThat(criteria.getValue()).isEqualTo(false);
}
@Test // GH-1960
void identicallyCreatedCriteriaAreEqual() {
Criteria c1 = Criteria.where("status").in("PUBLISHED", "DRAFT");
Criteria c2 = Criteria.where("status").in("PUBLISHED", "DRAFT");
assertThat(c1).isEqualTo(c2);
assertThat(c1.hashCode()).isEqualTo(c2.hashCode());
}
@Test // GH-1960
void notIdenticallyCreatedCriteriaAreNotEqual() {
Criteria[] criteria = new Criteria[] { Criteria.where("status").is("PUBLISHED"), //
Criteria.where("statusx").is("PUBLISHED"), //
Criteria.where("status").greaterThan("PUBLISHED"), //
Criteria.where("status").is("PUBLISHEDx") };
for (int i = 0; i < criteria.length - 1; i++) {
for (int j = i + 1; j < criteria.length; j++) {
assertThat(criteria[i]).isNotEqualTo(criteria[j]);
assertThat(criteria[i].hashCode()).isNotEqualTo(criteria[j].hashCode());
}
}
}
}

Loading…
Cancel
Save