[ http://issues.apache.org/jira/browse/IBATISNET-97?page=all ]
     
Gilles Bayon closed IBATISNET-97:
---------------------------------

    Fix Version: DataMapper 1.3
     Resolution: Fixed
      Assign To: Gilles Bayon

In SVN

> CacheModel does not support caching null results
> ------------------------------------------------
>
>          Key: IBATISNET-97
>          URL: http://issues.apache.org/jira/browse/IBATISNET-97
>      Project: iBatis for .NET
>         Type: Bug
>   Components: DataMapper
>     Versions: DataMapper 1.2.1
>     Reporter: Ron Grabowski
>     Assignee: Gilles Bayon
>     Priority: Minor
>      Fix For: DataMapper 1.3

>
> When caching is enabled and the sqlMap.QueryForObject method returns a null 
> value, that null value is not cached. Subsequent calls to 
> sqlMap.QueryForObject always miss the cache and query the database. For more 
> information see the Java ticket of the same issue:
>  http://issues.apache.org/jira/browse/IBATIS-174
> One solution is to define a special marker object in CacheModel.cs:
>  /// <summary>
>  /// Marked object to allow null objects to be cached
>  /// </summary>
>  [NonSerialized]
>  public readonly static object NULL_OBJECT = new Object();
> and insert that value into the cache when a null value is returned from the 
> initial query.
> The code to retrieve an item from the cache in MappedStatement.cs:
>  if (obj == null) 
>  {
>   obj = RunQueryForObject(request, session, parameterObject, resultObject);
>   _statement.CacheModel[key] = obj;
>  }
> could be changed to this:
>  // check if this query has alreay been run
>  if (obj == CacheModel.NULL_OBJECT)
>  {
>   // convert the marker object back into a null value
>   obj = null;
>  }
>  else if (obj == null) 
>  {
>   obj = RunQueryForObject(request, session, parameterObject, resultObject);
>   if (obj == null)
>   {
>    // store null value in cache using the special marker object
>    _statement.CacheModel[key] = CacheModel.NULL_OBJECT;
>   }
>   else
>   {
>    // query returned a normal, non-null value
>    _statement.CacheModel[key] = obj;
>   }
>  }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to