hashCode and equals should depend on the same fields.
On Wed, Mar 22, 2023 at 8:02 AM Humphrey Lopez <[email protected]> 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
> }
> }
> }
>
>