anchor.diff:      sb.append( EQUALS );
       sb.append( prepareSQL( value.get<%= object_type.primary_key.java.field_name %>() ) );
       return sb.toString();
  -<% end %>  }
  +<%
  +  end
  + end
  +%>  }
   
     protected String getInsertSql( final iris.beans.AbstractBean persistent )
     {
  -    <%= object_type.schema.java.package %>.<%= object_type.schema.name %>Validator.validate( persistent );
  +<%
  +  if object_type.abstract?
  +%>    throw new UnsupportedOperationException( "Insert of abstract object type <%= object_type.name %> is not supported" );
  +<%
  +  else
  +%>    <%= object_type.schema.java.package %>.<%= object_type.schema.name %>Validator.validate( persistent );
       final <%= fqn %> value = (<%= fqn %>)persistent;
       final iris.busobj.BusObjEntry entry = iris.busobj.BusObjEntry.getEntry( value );
       final StringBuffer sb = new StringBuffer();
       sb.append( INSERT_INTO );
  -    sb.append( getTableName() );
  +    sb.append( <%= fqn %>.TABLE_NAME );
       sb.append( " (" );
       sb.append( quote( iris.busobj.BusObjEntry.BATCH_ID ) );
       sb.append( COMMA );
  
positive.code: 
    protected String getRemoveSql( final iris.beans.AbstractBean persistent )
    {
      final <%= fqn %> value = (<%= fqn %>)persistent;
      final iris.busobj.BusObjEntry entry = iris.busobj.BusObjEntry.getEntry( value );
      final StringBuilder sb = new StringBuilder();
      sb.append( UPDATE );
      sb.append( quote( getTableName() ) );
      sb.append( SET );
      sb.append( iris.busobj.BusObjEntry.TO_DATE );
      sb.append( EQUALS );
  
negative.code: <% end
  %>    sb.append( ")" );
      return sb.toString();
  <% end %>  }
  
    protected void prepareQueryTail( final StringBuilder sb, final java.util.Map<String,Object> criteria )
    {
  