Lazy Load per Result
--------------------
Key: IBATIS-246
URL: http://issues.apache.org/jira/browse/IBATIS-246
Project: iBatis for Java
Type: New Feature
Components: SQL Maps
Versions: 2.1.6, 2.1.5
Environment: Any
Reporter: S Boyd
I have a need for LazyLoad on a per result basis. Since I saw this feature
listed in the wish list for 2.1.5, I attempted to add it to this version's
source. The lazy load global setting should be the default setting assigned
for all results in the sqlmaps. If this is not desired for a particular
result, then it can be overrided by the lazyLoad="true|false" on the affected
result. In adding this feature, I had to modify the sqlmap dtd and three java
classes: SqlMapParser, BasicResultMap, and BasicResultMapping.
In the SqlMapParser, I retrieved the lazy load property from the result element
at the beginning of the code block. If the lazyLoad property is not specified
in the result, then the global setting is used. This logic is inserted on line
416.
Lines: 407-414
407: BasicResultMapping mapping = new BasicResultMapping();
/* code omitted here */
414: mapping.setNestedResultMapName(resultMapName);
if(lazyLoad != null && lazyLoad.length() > 0){
mapping.setLazyLoad("true".equals(lazyLoad));
}
else{ // use global lazy load setting
mapping.setLazyLoad(vars.client.getDelegate().isLazyLoadingEnabled());
}
In the BasicResultMap, I temporarily override the global lazy load setting with
the BasicResultMapping's lazyload value. The reason for this was to avoid
changing the ResultLoader.loadResult signature. Maybe this can be improved
upon.
Line 442 was modifed to this:
/* Set global lazy load setting to mapping's lazy load */
boolean globalLazyLoad = client.isLazyLoadingEnabled();
client.getDelegate().setLazyLoadingEnabled(mapping.isLazyLoad());
result = ResultLoader.loadResult(client, statementName,
parameterObject, targetType);
/* Reset global lazy load to original value */
client.getDelegate().setLazyLoadingEnabled(globalLazyLoad);
In the BasicResultMapping, I simply added a new property (lazyLoad:boolean)
with set/getters.
Please let me know if this can be reviewed/refined and possibly added to the
next release. Or if you want the modifed java files and dtd.
Regards,
Stephen
--
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