They are in the example only checking the first field when overriding the equals. And hashCode always returns 1.
Op wo 22 mrt 2023 om 13:06 schreef Prigoreanu, Alexandru < prigoreanu.alexan...@anteash.com>: > hashCode and equals should depend on the same fields. > > On Wed, Mar 22, 2023 at 8:02 AM Humphrey Lopez <hmmlo...@gmail.com> wrote: > >> Hello, when having a key which equals another key, when trying to >> retrieve from cache it does not return the expected value. Is this a bug? >> >> I have a reproducible below in kotlin but in java we get the same result >> (test with Ignite 2.10 and 2.14) and java 11 and 19. >> >> >> import org.apache.ignite.Ignition >> import org.apache.ignite.configuration.CacheConfiguration >> import org.assertj.core.api.SoftAssertions >> import org.junit.jupiter.api.Test >> >> class MyTest { >> >> private val key1 = MyKey("ABC", "DEF") >> private val key2 = MyKey("ABC", "xxx") >> >> @Test >> fun testEquals() { >> SoftAssertions.assertSoftly { >> it.assertThat(key1).isEqualTo(key2) >> it.assertThat(key1 == key2).isTrue >> } >> } >> >> @Test >> fun testWithMap() { >> val map = mapOf(Pair(key1, "key1")) >> >> SoftAssertions.assertSoftly { >> it.assertThat(map.containsKey(key1)).isTrue >> it.assertThat(map.containsKey(key2)).isTrue >> } >> >> } >> >> @Test >> fun testWithIgnite() { >> val ignite = Ignition.start(); >> val cache = ignite.createCache(CacheConfiguration<MyKey, >> String>("mycache")) >> >> cache.put(key1, "key1") >> SoftAssertions.assertSoftly { >> it.assertThat(cache.containsKey(key1)).isTrue >> it.assertThat(cache.containsKey(key2)).isTrue >> } >> } >> >> private data class MyKey(val id: String, val type: String) { >> override fun equals(other: Any?): Boolean { >> if (other is MyKey) >> return id == other.id >> return false >> } >> >> override fun hashCode(): Int { >> return 1 >> } >> } >> } >> >>