From 90d368a95bf963303984c8ed2574c83e9348b827 Mon Sep 17 00:00:00 2001 From: Simon Bruder Date: Wed, 3 Jan 2024 23:46:34 +0100 Subject: [PATCH] Implement hashCode/equals on ID for Entities This also drops an angry comment that was the result of not being able to fathom the default behaviour. Fixes #87. --- src/main/java/catering/catalog/Consumable.java | 13 +++++++++++++ src/main/java/catering/catalog/Rentable.java | 14 ++++++++++++++ src/main/java/catering/order/CustomOrder.java | 14 ++++++++++++++ .../catering/orderCatalog/CustomCatalogEntry.java | 14 ++++++++++++++ src/main/java/catering/staff/Employee.java | 7 +++++++ src/main/java/catering/users/User.java | 14 ++++---------- 6 files changed, 66 insertions(+), 10 deletions(-) diff --git a/src/main/java/catering/catalog/Consumable.java b/src/main/java/catering/catalog/Consumable.java index 90b5bb4..adceed2 100644 --- a/src/main/java/catering/catalog/Consumable.java +++ b/src/main/java/catering/catalog/Consumable.java @@ -2,6 +2,7 @@ // SPDX-FileCopyrightText: 2023 swt23w23 package catering.catalog; +import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -60,4 +61,16 @@ public class Consumable extends Product { wholesalePrice = price; } + @Override + public int hashCode() { + return Objects.hash(Consumable.class, getId()); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof Consumable other) { + return getId().equals(other.getId()); + } + return false; + } } diff --git a/src/main/java/catering/catalog/Rentable.java b/src/main/java/catering/catalog/Rentable.java index ccba6e0..b0aae99 100644 --- a/src/main/java/catering/catalog/Rentable.java +++ b/src/main/java/catering/catalog/Rentable.java @@ -2,6 +2,7 @@ // SPDX-FileCopyrightText: 2023 swt23w23 package catering.catalog; +import java.util.Objects; import java.util.Set; import javax.money.MonetaryAmount; @@ -48,4 +49,17 @@ public class Rentable extends Product { public MonetaryAmount getPriceForTime(int hours) { return getPrice().multiply(hours).add(getPrice()); } + + @Override + public int hashCode() { + return Objects.hash(Rentable.class, getId()); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof Rentable other) { + return getId().equals(other.getId()); + } + return false; + } } diff --git a/src/main/java/catering/order/CustomOrder.java b/src/main/java/catering/order/CustomOrder.java index 5c6535d..93a3f0a 100644 --- a/src/main/java/catering/order/CustomOrder.java +++ b/src/main/java/catering/order/CustomOrder.java @@ -16,6 +16,7 @@ import java.time.LocalDateTime; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.util.HashSet; +import java.util.Objects; import java.util.Set; @Entity @@ -127,4 +128,17 @@ public class CustomOrder extends Order { public void setInvoiceAvailable(boolean available) { this.invoiceAvailable = available; } + + @Override + public int hashCode() { + return Objects.hash(CustomOrder.class, getId()); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof CustomOrder other) { + return getId().equals(other.getId()); + } + return false; + } } diff --git a/src/main/java/catering/orderCatalog/CustomCatalogEntry.java b/src/main/java/catering/orderCatalog/CustomCatalogEntry.java index f63867e..fb6fd0d 100644 --- a/src/main/java/catering/orderCatalog/CustomCatalogEntry.java +++ b/src/main/java/catering/orderCatalog/CustomCatalogEntry.java @@ -8,6 +8,7 @@ import org.salespointframework.quantity.Quantity; import java.util.Iterator; import java.util.Map; +import java.util.Objects; @Entity public class CustomCatalogEntry { @@ -77,4 +78,17 @@ public class CustomCatalogEntry { public void setTotalCost(int totalCost) { this.totalCost = totalCost; } + + @Override + public int hashCode() { + return Objects.hash(CustomCatalogEntry.class, getId()); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof CustomCatalogEntry other) { + return getId() == other.getId(); + } + return false; + } } diff --git a/src/main/java/catering/staff/Employee.java b/src/main/java/catering/staff/Employee.java index 4e2dc18..13cae27 100644 --- a/src/main/java/catering/staff/Employee.java +++ b/src/main/java/catering/staff/Employee.java @@ -4,6 +4,8 @@ package catering.staff; import static org.salespointframework.core.Currencies.EURO; +import java.util.Objects; + import javax.money.MonetaryAmount; import org.javamoney.moneta.Money; @@ -58,6 +60,11 @@ public class Employee { this.wage = Money.of(wage, EURO); } + @Override + public int hashCode() { + return Objects.hash(Employee.class, getId()); + } + @Override public boolean equals(Object obj) { if (obj instanceof Employee other) { diff --git a/src/main/java/catering/users/User.java b/src/main/java/catering/users/User.java index 766e37c..2c69512 100644 --- a/src/main/java/catering/users/User.java +++ b/src/main/java/catering/users/User.java @@ -7,6 +7,8 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.OneToOne; +import java.util.Objects; + import org.salespointframework.core.AbstractAggregateRoot; import org.salespointframework.useraccount.Role; import org.salespointframework.useraccount.UserAccount; @@ -74,23 +76,15 @@ public class User { return userAccount.getRoles().stream().toList().contains(Role.of(role)); } - // Der Ficker muss so. -- sbruder @Override public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((id == null) ? 0 : id.hashCode()); - result = prime * result + ((address == null) ? 0 : address.hashCode()); - result = prime * result + ((fullName == null) ? 0 : fullName.hashCode()); - result = prime * result + ((userAccount == null) ? 0 : userAccount.getId().hashCode()); - return result; + return Objects.hash(User.class, getId()); } @Override public boolean equals(Object obj) { if (obj instanceof User other) { - return address.equals(other.address) && fullName.equals(other.fullName) - && userAccount.getPassword().equals(other.userAccount.getPassword()); + return getId().equals(other.getId()); } return false; }