[
https://issues.apache.org/jira/browse/IGNITE-6500?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16242595#comment-16242595
]
ASF GitHub Bot commented on IGNITE-6500:
----------------------------------------
GitHub user kotamrajuyashasvi opened a pull request:
https://github.com/apache/ignite/pull/2992
IGNITE-6500 Bug in ignite's CassandraCacheStoreFactory
POJO fields of java wrapper type are not retaining null values from
Cassandra persistent store, while using ignite's CassandraCacheStoreFactory.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/kotamrajuyashasvi/ignite master
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/ignite/pull/2992.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #2992
----
commit 1c9c4abd03f3ff47dfdfbf651fcae87df9a0506b
Author: kotamrajuyashasvi <[email protected]>
Date: 2017-09-28T20:10:41Z
IGNITE-6500
commit f452f1c3d83986a7ea72e36da36730ae3b7b73bf
Author: kotamrajuyashasvi <[email protected]>
Date: 2017-09-28T20:29:53Z
IGNITE-6500
----
> POJO fields of java wrapper type are not retaining null values from Cassandra
> persistent store, while using ignite's CassandraCacheStoreFactory
> -----------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: IGNITE-6500
> URL: https://issues.apache.org/jira/browse/IGNITE-6500
> Project: Ignite
> Issue Type: Bug
> Components: cassandra
> Affects Versions: 2.1
> Reporter: Yashasvi Kotamraju
> Assignee: Yashasvi Kotamraju
> Priority: Minor
> Fix For: 2.4
>
>
> While using ignite's CassandraCacheStoreFactory(part of
> ignite-cassandra-store.jar) as cacheStoreFactory for a cache, if a POJO field
> is of wrapper class type, and the column value mapped in Cassandra persistent
> store is null then the POJO field is getting set to default primitive type
> instead of null.
> For Example: Assume a table 'person' in a Cassandra persistent store with the
> following structure and data.
> *table person:*
> *column* person_no(int) phno(text) address(text) age(int)
> name(text)
> *data* 1 12353 null
> null yash
> person_no is the PRIMARY_KEY.
> This table is mapped to person POJO for ignite cache.
> public class person{
> private int person_no;
> private String name;
> private Integer age=null;
> private String phno;
> private String address;
> .....getters and setters etc......
> }
> Now we load the row from Cassandra into ignite cache using cache.get(1) or
> cache.load(..) And we are using ignite's CassandraCacheStoreFactory for this
> cache.
> Let person p1 = cache.get(1);
> now p1.getName returns "yash", p1.getAddress returns null.
> But p1.getAge returns 0 instead of null. It is expected null value since the
> value is null in Cassandra persistent store.
> Hence if the value is 0 for the age field there is no way differentiate if it
> was null or it was actually 0. The similar problem exists for other wrapper
> types -> Long, Float, Double, Boolean.
> This problem cause is as follows.
> In
> org.apache.ignite.cache.store.cassandra.persistence.PojoField.setValueFromRow(..)
> method first the Cassandra field value is obtained by using the method
> PropertyMappingHelper.getCassandraColumnValue(..). This method calls DataStax
> Driver methods Row.getInt() or Row.getFloat() or Row.getDouble() etc..
> depending upon the column. This value obtained from this method is then set
> to the respective POJO field. But According to Datastax documentation getInt
> returns 0 if column value is null and similarly getLong returns 0L ,
> getDouble return 0.0 etc. Hence PropertyMappingHelper.
> getCassandraColumnValue returns 0 or 0L or 0.0 or false even if the value is
> null. And then this value is set to the wrapper type POJO fields. The problem
> only persists with the primitive data types in Cassandra mapped to wrapper
> type fields in POJO. For other types like String , Date etc.. the null values
> are retained in the POJO fields.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)