It looks like the case sensitivity for the affinity key is a bug. Vladimir,
what do you think?

On Mon, Oct 23, 2017 at 11:19 AM, Denis Magda <dma...@apache.org> wrote:

> Vladimir, thanks a lot for looking into this!
>
> > On Oct 23, 2017, at 12:35 AM, Vladimir Ozerov <voze...@gridgain.com>
> wrote:
> >
> > Denis,
> >
> > Now more detailed answer:
> >
> > 1) It is expected that "City" class is not be found. You should set
> > key/value type names to fully-qualified class name to make it work.
> > Improvements: docs
>
> To make the Class-based key-vakye access and deserialization workable did
> the following:
> - follow your piece of advice providing full-qualified names in CREATE
> TABLE;
> - comment out ‘simpleName’ binary names mapper [1].
>
> However, it means that now the heterogeneous scenarios where .NET or C++
> key-value access is needed are not supported. Do you have an understanding
> on how this can be done in the feature releases?
>
> > 2) There is no need to implement hash code. Why did you do this?
>
> That’s a big surprise that we calculate it automatically if a key is
> serialized into the binary form. Will be documented:
> https://issues.apache.org/jira/browse/IGNITE-6717
>
> > 3) We will not have case-insensitive policy, SQL databases doesn't work
> > this way. In order to preserve case you should define column name in
> quotes.
>
> Seems that the issue pin points to the affinity key case only:
> - a field is defined as ‘CountryCode’ in DDL [2].
> - in DML it can be used with any letters case - ‘countryCode’,
> ‘countrycode’, etc,
> - BinaryObjectBuild allowed me to define the field as `countryCode` [3]
> w/o any issue.
> - However, once I defined the field in CityKey class as is in DDL
> (`CountryCode`) the following exception was thrown:
>
> Exception in thread "main" class 
> org.apache.ignite.binary.BinaryObjectException:
> Binary type has different affinity key fields [typeName=demo.model.CityKey,
> affKeyFieldName1=COUNTRYCODE, affKeyFieldName2=CountryCode]
>
> and I forced to rename the field to `COUNTRYCODE` in CityKey class. Seems
> like a bug?
>
>
> [1] https://github.com/dmagda/ignite_world_demo/blob/master/
> config/ignite-config.xml#L43
> [2] https://github.com/dmagda/ignite_world_demo/blob/master/
> ignite_world.sql#L31
> [3] https://github.com/dmagda/ignite_world_demo/blob/master/
> src/main/java/demo/keyvalue/KeyValueDataProcessing.java#L75
> [4] https://github.com/dmagda/ignite_world_demo/blob/master/
> src/main/java/demo/model/CityKey.java#L15
>
> —
> Denis
>
>
> >
> > On Sat, Oct 21, 2017 at 2:34 PM, Vladimir Ozerov <voze...@gridgain.com>
> > wrote:
> >
> >> Denis,
> >>
> >> SQL <-> key-Val transparency is complex thing, especially if you work
> with
> >> real Java classes instead of binary objects.
> >>
> >> We will try to improve something in 2.4, but do not expect great
> usability
> >> here. There is always be some pain in such scenarios.
> >>
> >> сб, 21 окт. 2017 г. в 9:23, Denis Magda <dma...@apache.org>:
> >>
> >>>
> >>>> On Oct 20, 2017, at 3:56 PM, Denis Magda <dma...@apache.org> wrote:
> >>>>
> >>>> * failed to deserialize BinaryObject value to City type [7]. Just
> >>> classical "class org.apache.ignite.binary.BinaryInvalidTypeException:
> >>> City" caused by "Caused by: java.lang.ClassNotFoundException: City”.
> >>>
> >>>
> >>> Recalled that this should be caused by the fact that all the data was
> >>> inserted with DML (cache.put(key, BinaryObjects)) and there was no
> single
> >>> cache.put(key, new City()) that would register City class. Guess we
> need to
> >>> add an API that forces classes registration from the app side or
> something
> >>> more efficient.
> >>>
> >>> —
> >>> Denis
> >>
> >>
>
>

Reply via email to