最近使用IBATIS,运用到了CACHEMODEL
异常如下:
/SqlMapConfig.xml/end() there are no statement named abatorgenerated_deleteByPrimaryKey .
SQLMAPCONFIG。XML文件设置如下:
<settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxRequests="128" maxSessions="100" maxTransactions="5" useStatementNamespaces="true" defaultStatementTimeout="5" statementCachingEnabled="true" classInfoCacheEnabled="true" errorTracingEnabled="true" />
<sqlMap resource="com/ytx/ztc/model/sqlmap/ft_bet_team_SqlMap.xml"/>
在其运用的XML中配置如下:
ft_bet_team_SqlMap.xml
<cacheModel type="LRU" id="cache_oddsproviderlist" readOnly="true" serialize="true">
<flushInterval hours="24"></flushInterval>
<flushOnExecute statement="odds_provider.abatorgenerated_deleteByPrimaryKey"/>
<flushOnExecute statement="odds_provider.abatorgenerated_deleteByExample"/>
<flushOnExecute statement="odds_provider.abatorgenerated_insert"/>
<flushOnExecute statement="odds_provider.abatorgenerated_updateByPrimaryKey"/>
<flushOnExecute statement="odds_provider.abatorgenerated_updateByPrimaryKeySelective"/>
<property value="cache-size" name="200"/>
</cacheModel>
<select id="getPageOddsProviderList" parameterClass="com.ytx.ztc.model.OddsProvider" resultMap="abatorgenerated_OddsProviderResult">
select * from ft_bet_team
</select>
原因是cacheModel 运行的语句,不能自动加上空间域名。必须手动的添加。如
<flushOnExecute statement="abatorgenerated_deleteByPrimaryKey"/>
上面的就会报找不到这条语句。加上空间名后。如下就没有这个问题了。
<flushOnExecute statement="odds_provider.abatorgenerated_deleteByPrimaryKey"/>
这个问题解决后。但是遇到缓存不起作用??
我第一次把数据查询完成后,有第一次查询的结果集中,通过后台数据库“偷偷”的删除其中一条。
如果缓存应用成功的话,那么会如前一次查询一样,显示出来。
但结果是查询出来的结果里面没有这条记录了??难道我哪个地方配置有误???
现在问题已经解决。。。。原因是在cacheModel 语句的ID中要手动添加空间名。但是在SqlMapConfig.xml
中配置的.也就是说这个 cacehModel是相对全局来说的。而不像XML中的DDL语句.
statementCachingEnabled="true"
不管用了??