Hi Alisher,

You need to fields identity resolver if want to specify a set of fields to be 
used for hashCode and equals. 
http://apacheignite.gridgain.org/docs/binary-marshaller#section-binary-field-identity-resolver
 
<http://apacheignite.gridgain.org/docs/binary-marshaller#section-binary-field-identity-resolver>

—
Denis

> On Jan 10, 2017, at 5:30 AM, Alisher Alimov <[email protected]> wrote:
> 
> Hello!
> 
> I have a little problem when try to use object as key with BinaryMarshaller. 
> Bug occurred only with BinaryMarshaller, on JdkMarshaller all is working fine 
> as expected.
> 
> Here is example:
> 
> UserObject class used as key that override hashCode and equals methods but 
> seems that BinaryMarshaller using all fields from key object for building 
> hashCode
> 
> private static class UserObject implements Serializable {
>     private final Integer id;
>     private final Integer notIdField;
> 
>     UserObject(Integer id, Integer notIdField) {
>         this.id = id;
>         this.notIdField = notIdField;
>     }
> 
>     public Integer getId() {
>         return id;
>     }
> 
>     public Integer getNotIdField() {
>         return notIdField;
>     }
> 
>     @Override
>     public int hashCode() {
>         return Objects.hash(id);
>     }
> 
>     @Override
>     public boolean equals(Object obj) {
>         if (obj instanceof UserObject) {
>             return Objects.equals(((UserObject) obj).getId(), getId());
>         }
> 
>         return false;
>     }
> }
> 
> 
> public void testObjectKey() throws Exception {
>     IgniteCache<UserObject, Integer> cache = ignite.getOrCreateCache("test");
> 
> 
>     for (int i = 0; i < 10; i++) {
>         cache.put(new UserObject(0, i), i);
> 
>         Assert.assertEquals(1, cache.size(CachePeekMode.PRIMARY));
>     }
> 
>  }
> 
> Is it expected behaviour or bug?
> 
> With best regards
> Alisher Alimov
> [email protected] <mailto:[email protected]>
> 
> 
> 
> 

Reply via email to