最近使用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"
不管用了??