We have FAT keys that contain information about the Values we store. KEY - Object A - Object B
VALUE - Object Y The KEY we are using contains several (small) objects as fields. We have added to Object A a new field A.TYPE so when searching through the cache we could filter on that type. I guess we will need to first get all the keys that match that A.TYPE and then get the objects with those objects, I think looping through the keys will be quicker than looping through all the values. Maybe we can query/filter the keys in BinaryMode, and then get all corresponding values? Just thinking out loud. We don't want to be deserializing unnecessarily values (Object.Y). Maybe with QuerySqlFields on the key? Humphrey Op wo 22 mrt 2023 om 15:18 schreef Rick Lee <eerick...@gmail.com>: > > 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 >>>>>>> } >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> >>>>>