Program: 3628
Project: 3628
Buggy source:
/** 
 * Construct an item with the given table row
 * @param context  the context this object exists in
 * @param row      the corresponding row in the table
 */
Item(Context context,TableRow row) throws SQLException {
  ourContext=context;
  itemRow=row;
  dublinCoreChanged=false;
  dublinCore=new ArrayList();
  bundles=new ArrayList();
  submitter=null;
  if (!itemRow.isColumnNull("String_Node_Str")) {
    submitter=EPerson.find(ourContext,itemRow.getIntColumn("String_Node_Str"));
  }
  TableRowIterator tri=DatabaseManager.query(ourContext,"String_Node_Str","String_Node_Str" + "String_Node_Str" + "String_Node_Str" + itemRow.getIntColumn("String_Node_Str") + "String_Node_Str");
  while (tri.hasNext()) {
    TableRow r=(TableRow)tri.next();
    Bundle fromCache=(Bundle)context.fromCache(Bundle.class,r.getIntColumn("String_Node_Str"));
    if (fromCache != null) {
      bundles.add(fromCache);
    }
 else {
      bundles.add(new Bundle(ourContext,r));
    }
  }
  tri=DatabaseManager.query(ourContext,"String_Node_Str","String_Node_Str" + itemRow.getIntColumn("String_Node_Str") + "String_Node_Str");
  while (tri.hasNext()) {
    TableRow resultRow=(TableRow)tri.next();
    String[] dcType=DCType.quickFind(context,resultRow.getIntColumn("String_Node_Str"));
    DCValue dcv=new DCValue();
    dcv.element=dcType[0];
    dcv.qualifier=dcType[1];
    dcv.value=resultRow.getStringColumn("String_Node_Str");
    dcv.language=resultRow.getStringColumn("String_Node_Str");
    dublinCore.add(dcv);
  }
  handle=HandleManager.findHandle(context,this);
  context.cache(this,row.getIntColumn("String_Node_Str"));
}

Fixed version (ground truth):
/** 
 * Construct an item with the given table row
 * @param context  the context this object exists in
 * @param row      the corresponding row in the table
 */
Item(Context context,TableRow row) throws SQLException {
  ourContext=context;
  itemRow=row;
  dublinCoreChanged=false;
  dublinCore=new ArrayList();
  bundles=new ArrayList();
  submitter=null;
  if (!itemRow.isColumnNull("String_Node_Str")) {
    submitter=EPerson.find(ourContext,itemRow.getIntColumn("String_Node_Str"));
  }
  TableRowIterator tri=DatabaseManager.query(ourContext,"String_Node_Str","String_Node_Str" + "String_Node_Str" + "String_Node_Str" + itemRow.getIntColumn("String_Node_Str") + "String_Node_Str");
  while (tri.hasNext()) {
    TableRow r=(TableRow)tri.next();
    Bundle fromCache=(Bundle)context.fromCache(Bundle.class,r.getIntColumn("String_Node_Str"));
    if (fromCache != null) {
      bundles.add(fromCache);
    }
 else {
      bundles.add(new Bundle(ourContext,r));
    }
  }
  tri=DatabaseManager.query(ourContext,"String_Node_Str","String_Node_Str" + itemRow.getIntColumn("String_Node_Str") + "String_Node_Str");
  while (tri.hasNext()) {
    TableRow resultRow=(TableRow)tri.next();
    String[] dcType=DCType.quickFind(context,resultRow.getIntColumn("String_Node_Str"));
    DCValue dcv=new DCValue();
    dcv.element=dcType[0];
    dcv.qualifier=dcType[1];
    dcv.value=resultRow.getStringColumn("String_Node_Str");
    dcv.language=resultRow.getStringColumn("String_Node_Str");
    dublinCore.add(dcv);
  }
  itemRow.setColumn("String_Node_Str",new Date());
  handle=HandleManager.findHandle(context,this);
  context.cache(this,row.getIntColumn("String_Node_Str"));
}