Custom CacheModels are still open as
http://issues.apache.org/jira/browse/IBATIS-137. What you can already do
now is write your own CacheController and specify the full class name
where you would normally put LRU, MEMORY, ...
But even then it will be very hard to implement a kind of object
identity cache (in a general way), what you would want to have is ORMish
like Hibernate does it... and that doesn't match up with how iBATIS works.
iBATIS just maps ResultSets to objects, it doesn't keep track itself of
object identities/states, you can't specify e.g. to save all
"dirty/changed" objects.
Regards,
Sven
Reuben Firmin wrote:
Clinton sez, in the message referenced in that bug: "This is where
custom, or domain specific, caching comes into play." Apologies if
this is in TFM, but is there a way to get Ibatis to use your own cache
implementation? Or is this something that you'd have to write at your
DAO level?
Sven Boden wrote:
No that's not possible, and probably will never be. There's a JIRA
open for it http://issues.apache.org/jira/browse/IBATIS-222 which I
would like to close as "won't fix" ;-).
The problem is that iBATIS has no concept of object identity. If you
look at the caching code, caching is on the "level of the
query/ResultSet", if you have iBATIS e.g. return 2 lists of objects,
it may be well be that what for you is 1 and the same object may be
cached twice (once in every list). Object identity is a concept that
doesn't mix with Sql Mapping.
Regards,
Sven
Reuben Firmin wrote:
I've been wondering about a related question -- is there any way to
flush a cache for only one particular object?
I'd like to be able to say "I've only modified this Foo bean, so
flush it, but keep the other Foo beans that are in the cache". Are
there problems associated with this that I'm missing?
Sven Boden wrote:
Following should do the trick:
sqlMapClient.flushDataCache();
or
sqlMapClient.flushDataCache("cache id");
Look in the com.ibatis.sqlmap.client.SqlMapClient interface.
Regards,
Sven
Joe Wolf wrote:
Is there any way to programmatically flush a cache? I'm getting
ready to head down the road where I'll just call some bogus
statement in my SQL map that's in my cache's flushOnExecute list.
I was wondering if there was a more straightforward way. Thanks.
-Joe CompSci Resources, LLC