anchor.diff:  
     protected String handleSelection()
     {
  -    final StringBuffer sb = new StringBuffer();
  +<%
  +  if object_type.abstract?
  +%>    throw new UnsupportedOperationException( "getTableName() called on abstract object type <%= object_type.name %>" );
  +<%
  +  else
  +%>    final StringBuffer sb = new StringBuffer();
   
       sb.append( iris.busobj.BusObjEntry.BATCH_ID );
       sb.append( COMMA );
  
positive.code:     sb.append( <%= fqn %>.COLUMN_<%= uppercase_constantize(attribute.name) %> );
  <% end %>
      return sb.toString();
    }
  
    protected String getTableName()
    {
      return <%= fqn %>.TABLE_NAME;
    }
  
    protected String getRemoveSql( final iris.beans.AbstractBean persistent )
    {
  
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|
  