[ https://issues.apache.org/jira/browse/IBATIS-492?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12576401#action_12576401 ]
Jeff Butler commented on IBATIS-492: ------------------------------------ <javaModelGenerator type="..."> Take a look at the documentation page for extending Abator, or the documentation page for the <javaModelGenerator> element. > Allow Abator configuration to extend model objects from existing classes > ------------------------------------------------------------------------ > > Key: IBATIS-492 > URL: https://issues.apache.org/jira/browse/IBATIS-492 > Project: iBatis for Java > Issue Type: Improvement > Components: Build/Deployment > Affects Versions: 2.3.1 > Reporter: Ryan Shelley > Priority: Minor > > Currently, only javaModelGenerator definitions can declare a rootClass, > however, it would extremely helpful to allow individual table elements to > also use a rootClass that would override the javaModelGenerator's rootClass. > This would allow a developer to create custom superclasses for individual > Models. The purpose of creating superclasses for Models would be to allow > non-table-specific meta-data to be attached to individual model objects, or > common methods between specific Model types. Additionally, each custom > superclass could be required to implement an iBATIS interface defining an > abstract onUpdate and onWrite method. > Ultimately, Abator would have a new rootClass attribute on the table element. > If declared on the table, Abator would generate new Model classes extended > from this custom superclass. Additionally, each setter would call the > superclass's onUpdate method, and each insert/update/delete would call the > superclass's onWrite method. This would allow the developer to create > various meta-data fields associated to the Model, and also provide a means of > automatically updating meta-data fields when a column-mapped attribute is > updated or the model is modified in the database. > Functionally, this would allow the developer to have a flag denoting if the > Model has changed. When the column-mapped attribute is updated through the > member's setter, behind the scenes, the Model would call onUpdate, which the > developer defines to change the flag to "true". The developer then has some > code to iterate through a list of Models and if any flag is set to "true", it > is updated in the database. This update would then call the onWrite method > of the supeclass, which the developer defines to flip the flag back to > "false". The difficulty with the onWrite method is synchronizing it with > transactions so that onWrite is only invoked on successfully committed Models. > Regardless, the ability to extend the abator-generated classes from custom > superclasses to add meta-data to the models would be a huge benefit, even > without onUpdate/onWrite methods. > The reason I bring this improvement up, is that currently, the only way to > accomplish this functionality is to extend the abator-generated classes to > new classes (making the abator-generated classes superclasses). This would > then require new SQLMaps, ResultMaps, and DAO methods to implement, and > ultimately, the developer's application would have two versions of the same > Model floating around to enable different functionality. If the > abator-generated models are extended from custom superclasses, zero > additional work would be required of the developer to implement, and allow > the meta-data enhanced methods to be returned from abator-generated SQLMaps. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.