When object has been built, there is no way to know, whether hash code was set or not. Zero could be real hash code, as well as not set hash code.
Random is not an option. Any kind of automatic generation is not an option as well, because we do not know, how hash code of real class instance is calculated. I honestly do not see a big problem here. We can simply improve JavaDocs. It could be a problem in some specific cases, like JDBC store. This situation require the same solution as already mentioned problems with equals and comparators. Vladimir. 24 марта 2016 г. 11:52 пользователь "Yakov Zhdanov" <yzhda...@apache.org> написал: > Random hash code is not an option. > > I would suggest cache throws exception on update if binary object created > with builder does not have hash code initialized. > > Vladimir, can we somehow make it possible to know whether hash code was or > was not inited on a binary object? > > --Yakov > > 2016-03-24 11:43 GMT+03:00 Anton Vinogradov <avinogra...@gridgain.com>: > > > Hello, > > > > I found that every BinaryObject created by BinaryObjectBuilder has > hashcode > > == 0 by default. > > This can cause situation that all objects created by code similar to: > > > > *BinaryObject key = builder.setField("id", i).build();* > > *streamer.addData(key, key);* > > > > will be stored at one partition and this cause grid performance drop. > > > > Of course user can set hashcode: > > > > *BinaryObject key = builder.setField("id", > i).hashCode(random()).build();* > > > > but there is no guarantee that he will. > > > > I propose to generate random hashcode or hashcode based on field's > > hashcodes in case no hashcode set or to warn user somehow that he have to > > specify it. > > > > Thoughts? > > >