Buggy code:
public abstract class AttributeValue extends BaseAttributeValue implements Persistent { private Attribute aAttribute ; private Transaction transaction ; private NumberKey oldOptionId ; private NumberKey oldUserId ; private String oldValue ; private int oldNumericValue ; private boolean oldOptionIdIsSet ; private boolean oldUserIdIsSet ; private boolean oldValueIsSet ; private boolean oldNumericValueIsSet ; private AttributeValue chainedValue ; private static String className = "AttributeValue" ; protected AttributeValue ( ) { } public AttributeValue getChainedValue ( ) { } public void setChainedValue ( AttributeValue v ) throws Exception { } public List getValueList ( ) { } public void setAttributeId ( NumberKey nk ) throws Exception { } public void setIssueId ( NumberKey nk ) throws Exception { } public void startTransaction ( Transaction transaction ) throws ScarabException { } private void endTransaction ( ) { } private void checkTransaction ( String errorMessage ) throws ScarabException { } public String getQueryKey ( ) { } public String toString ( ) { } public String getOptionIdAsString ( ) { } public void setOptionId ( NumberKey optionId ) throws Exception { } public void setNumericValue ( int v ) { } protected void setOptionIdOnly ( NumberKey optionId ) throws Exception { } public void setUserId ( NumberKey userId ) throws Exception { } protected void setUserIdOnly ( NumberKey value ) throws Exception { } public NumberKey [ ] getOptionIds ( ) throws Exception { } public void setOptionIds ( NumberKey [ ] ids ) throws Exception { } public NumberKey [ ] getUserIds ( ) throws Exception { } public void setUserIds ( NumberKey [ ] ids ) throws Exception { } public void setValue ( String value ) { } protected void setValueOnly ( String value ) { } public boolean isRequired ( ) throws Exception { } public boolean isSet ( ) throws Exception { } public Attribute getAttribute ( ) throws Exception { } public RModuleAttribute getRModuleAttribute ( ) throws Exception { } public void setAttribute ( Attribute v ) throws Exception { } public AttributeOption getAttributeOption ( ) throws Exception { } public boolean isQuickSearchAttribute ( ) throws Exception { } static String getCacheKey ( ObjectKey key ) { } public static AttributeValue getNewInstance ( RModuleAttribute rma , Issue issue ) throws Exception { } public static AttributeValue getNewInstance ( ObjectKey attId , Issue issue ) throws Exception { } public static synchronized AttributeValue getNewInstance ( Attribute attribute , Issue issue ) throws Exception { } protected abstract Object loadResources ( ) throws Exception { } protected abstract void setResources ( Object resources ) { } public abstract void init ( ) throws Exception { } public boolean supportsVoting ( ) { } public AttributeValue copy ( ) throws Exception { } public void save ( DBConnection dbcon ) throws Exception { <START_BUG> if ( ( isModified ( ) ) && ( ! ( getIssue ( ) . isTemplate ( ) ) ) ) { <END_BUG> checkTransaction ( "Cannot<seq2seq4repair_space>save<seq2seq4repair_space>a<seq2seq4repair_space>value<seq2seq4repair_space>outside<seq2seq4repair_space>a<seq2seq4repair_space>Transaction" ) ; Activity activity = new Activity ( ) ; String desc = getActivityDescription ( ) ; activity . create ( getIssue ( ) , getAttribute ( ) , desc , this . transaction , oldNumericValue , getNumericValue ( ) , oldUserId , getUserId ( ) , oldOptionId , getOptionId ( ) , oldValue , getValue ( ) ) ; } super . save ( dbcon ) ; if ( ( chainedValue ) != null ) { chainedValue . save ( dbcon ) ; } endTransaction ( ) ; } private String getActivityDescription ( ) throws Exception { } }

Fix:
if ( isModified ( ) ) {