Why don’t u put the type to value and leave the id as the key?
「Humphrey Lopez <hmmlo...@gmail.com>」在 2023年3月22日 週三,下午10:16 寫道:

> Okay transient is also not the way to go, cause we want to be able to
> filter sometimes on that field, so it should be there in the cache. But
> thanks for clarifying that the Equals and HashCode is not being used on
> BinaryObjects.
>
> Op wo 22 mrt 2023 om 14:51 schreef Humphrey Lopez <hmmlo...@gmail.com>:
>
>> I see marking the field as Transient Ignite won't serialize it to
>> BinaryObject, is that the way to go?
>>
>> Humphrey
>>
>> Op wo 22 mrt 2023 om 14:37 schreef Humphrey Lopez <hmmlo...@gmail.com>:
>>
>>> Thanks for clarifying that. Is there a way to mark a property/field to
>>> be excluded when storing?
>>>
>>> Humphrey
>>>
>>> Op wo 22 mrt 2023 om 14:20 schreef Stephen Darlington <
>>> stephen.darling...@gridgain.com>:
>>>
>>>> Ignite doesn’t use your equals or hashCode implementation. Data is
>>>> stored as a BinaryObject, and it’s that that is compared for equality.
>>>>
>>>> On 22 Mar 2023, at 12:14, Humphrey Lopez <hmmlo...@gmail.com> wrote:
>>>>
>>>> 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
>>>>>>         }
>>>>>>     }
>>>>>> }
>>>>>>
>>>>>>
>>>>

Reply via email to