anchor.diff:      sb.append( <%= fqn %>.COLUMN_<%= uppercase_constantize(attribute.name) %> );
   <% end %>
       return sb.toString();
  -  }
  +<% end %>  }
   
     protected String getTableName()
     {
  -    return <%= fqn %>.TABLE_NAME;
  -  }
  +<%
  +  if object_type.abstract?
  +%>    throw new UnsupportedOperationException( "getTableName() called on abstract object type <%= object_type.name %>" );
  +<%
  +  else
  +%>    return <%= fqn %>.TABLE_NAME;
  +<% end %>  }
   
     protected String getRemoveSql( final iris.beans.AbstractBean persistent )
     {
  
positive.code: 
    protected String handleSelection()
    {
      final StringBuffer sb = new StringBuffer();
  
      sb.append( iris.busobj.BusObjEntry.BATCH_ID );
      sb.append( COMMA );
  
negative.code:     return list;
    }
  
    protected String handleCriterion( final java.util.Map<String,Object> criteria )
    {
      final StringBuilder sb = new StringBuilder();
  <% object_type.attributes.select {|a| a.persistent? && !a.iris.runtime_managed?}.each do |attribute|
  