ignite-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Denis Mekhanikov <dmekhani...@gmail.com>
Subject Re: POJO field having wrapper type, mapped to cassandra table are getting initialized to respective default value of primitive type instead of null if column value is null.
Date Mon, 25 Sep 2017 17:53:26 GMT
I guess, you are right. It's worth checking if the column value is null for
wrapper types in that method.

Please file a ticket to JIRA:
https://issues.apache.org/jira/secure/Dashboard.jspa
Also consider contributing this patch to Ignite.

Denis

пн, 25 сент. 2017 г. в 17:13, kotamrajuyashasvi <kotamrajuyashasvi@gmail.com
>:

> Hi
>
> Thanks for your response. Following is a sample reproducer for the issue.
>
> ///////////////////////////////PERSON
> POJO////////////////////////////////////////////////
> public class person {
>         private Integer person_no;
>         private String name;
>         private Integer age;
>         private String phno;
>         private String address;
>
>         public IntegergetPerson_no() {
>                 return person_no;
>         }
>
>         public void setPerson_no(Integer person_no) {
>                 this.person_no = person_no;
>         }
>
>         public String getName() {
>                 return name;
>         }
>
>         public void setName(String name) {
>                 this.name = name;
>         }
>
>         public Integer getAge() {
>                 return age;
>         }
>
>         public void setAge(Integer age) {
>                 this.age = age;
>         }
>
>         public String getPhno() {
>                 return phno;
>         }
>
>         public void setPhno(String phno) {
>                 this.phno = phno;
>         }
>
>         public String getAddress() {
>                 return address;
>         }
>
>         public void setAddress(String address) {
>                 this.address = address;
>         }
> }
>
>
> //////////////////////////////// IGNITE-CONFIG XML
> //////////////////////////////////////////
> <beans xmlns="http://www.springframework.org/schema/beans"
>        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>        xsi:schemaLocation="
>        http://www.springframework.org/schema/beans
>        http://www.springframework.org/schema/beans/spring-beans.xsd">
>
>
>
>     <import resource="./connection-settings.xml" />
>
>
>     <bean id="cache_persistence_settings"
>
> class="org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings">
>         <constructor-arg type="org.springframework.core.io.Resource"
> value="file:C:\\IgniteDemo\persistence-settings.xml" />
>     </bean>
>
>  <bean id="grid.cfg"
> class="org.apache.ignite.configuration.IgniteConfiguration">
>
>             <property name="peerClassLoadingEnabled" value="true"/>
> <property name="cacheConfiguration">
>
>                 <list>
>                         <bean
> class="org.apache.ignite.configuration.CacheConfiguration">
>                             <property name="name" value="person"/>
>                             <property name="readThrough" value="true"/>
>                             <property name="writeThrough" value="true"/>
>                             <property name="cacheMode"
> value="PARTITIONED"/>
>
>                           *  <property name="cacheStoreFactory">
>                                 <bean
> class="org.apache.ignite.cache.store.cassandra.CassandraCacheStoreFactory">
>                                     <property name="dataSourceBean"
> value="cassandraRegularDataSource"/>
>                                     <property
> name="persistenceSettingsBean"
> value="cache_persistence_settings"/>
>                                 </bean>
>                             </property>*
>
>                         </bean>
>                  </list>
>          </property>
>
> /////////////////////////////PERSISTENT SETTINGS
> XML//////////////////////////////////////
> <persistence keyspace="testkeyspace" table="person">
>
>      <keyPersistence class="java.lang.Integer" strategy="primitive" />
>
>      <valuePersistence class="com.IgniteDemo.person"
>                       strategy="POJO" />
>
> </persistence>
>
> /////////////////////////////// CASSANDRA DATA
> /////////////////////////////////////////////
>
> table person:
>
> int                 text           text            int       text
>
> person_no     phno          address       age      name
> 1                  "12353"      null             null      "yash"
>
> //////////////////////////////CLIENT JAVA EXAMPLE DEMONSTRATING THE ISSUE
> ///////////////////////
>
> IgniteCache<Integer, person> cache = ignite.cache("person");
> person p1 = cache.get(1);
> System.out.println("person name: "+p1.getName());
> System.out.println("person age: "+p1.getAge());
> System.out.println("person address: "+p1.getAddress());
>
>
> output:
>
> person name: yash
> person age: 0
> person address: null
>
> here person age  should be null since it is null in cassandra database but
> its set to 0(default value of int) during cache.get() and even during
> cache.load(). Hence it becomes difficult to differentiate between default
> values and null values. The problem only exists with primitive types
> wrapper
> classes like Integer,Float,Boolean,Double,Long etc..  . Hence address is
> displayed/set to null as it is in cassandra.
>
> I found in the ignite source code that in
>
> org.apache.ignite.cache.store.cassandra.common.PropertyMappingHelper.getCassandraColumnValue(..)
> method there is no check being made to see if the column value is null or
> not for Integer,Float,Double,Long or Boolean. Here directly getInt,getFloat
> etc.. are called without making a check if the column value is null or not.
> From Datastax documentation we can see that getInt returns 0 if column
> value
> is null and similarly getLong returns 0L , getDouble return 0.0 etc.. But
> for String -> getString returns null if column value is null and also same
> for Date etc... Hence for primitive types I guess there should be an
> additional check to see if the column value is null using Row.isNull method
> of Datastaxdriver.
>
>
>
> --
> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>

Mime
View raw message