Program: 48798
Project: 48798
Buggy source:
@Transactional private void replaceNodeEntity(BaseNode vNode){
  logger.info("String_Node_Str" + vNode.getVmName());
  ClusterEntity cluster=getClusterEntityMgr().findByName(vNode.getClusterName());
  AuAssert.check(cluster != null);
  NodeGroupEntity nodeGroupEntity=getClusterEntityMgr().findByName(vNode.getClusterName(),vNode.getGroupName());
  AuAssert.check(nodeGroupEntity != null);
  if (nodeGroupEntity.getNodes() == null) {
    nodeGroupEntity.setNodes(new LinkedList<NodeEntity>());
  }
  boolean insert=false;
  NodeEntity nodeEntity=getClusterEntityMgr().findByName(nodeGroupEntity,vNode.getVmName());
  if (nodeEntity == null) {
    nodeEntity=new NodeEntity();
    nodeGroupEntity.getNodes().add(nodeEntity);
    insert=true;
  }
  nodeEntity.setVmName(vNode.getVmName());
  setNodeStatus(nodeEntity,vNode);
  if (vNode.getVmMobId() == null && nodeEntity.getMoId() != null) {
    vNode.setVmMobId(nodeEntity.getMoId());
  }
  nodeEntity.setVcRp(rpDao.findByClusterAndRp(vNode.getTargetVcCluster(),vNode.getTargetRp()));
  if (vNode.getVmMobId() != null) {
    nodeEntity.setMoId(vNode.getVmMobId());
    nodeEntity.setRack(vNode.getTargetRack());
    nodeEntity.setHostName(vNode.getTargetHost());
    nodeEntity.setIpConfigs(vNode.getIpConfigs());
    nodeEntity.setGuestHostName(vNode.getGuestHostName());
    nodeEntity.setCpuNum(vNode.getCpu());
    nodeEntity.setMemorySize((long)vNode.getMem());
    Set<DiskEntity> diskEntities=nodeEntity.getDisks();
    DiskEntity systemDisk=nodeEntity.findSystemDisk();
    if (systemDisk == null)     systemDisk=new DiskEntity(nodeEntity.getVmName() + "String_Node_Str");
    systemDisk.setDiskType(DiskType.SYSTEM_DISK.getType());
    systemDisk.setExternalAddress(DiskEntity.getSystemDiskExternalAddress());
    systemDisk.setNodeEntity(nodeEntity);
    systemDisk.setDatastoreName(vNode.getTargetDs());
    VcVmUtil.populateDiskInfo(systemDisk,vNode.getVmMobId());
    diskEntities.add(systemDisk);
    for (    Disk disk : vNode.getVmSchema().diskSchema.getDisks()) {
      DiskEntity newDisk=nodeEntity.findDisk(disk.name);
      if (newDisk == null) {
        newDisk=new DiskEntity(disk.name);
        diskEntities.add(newDisk);
      }
      newDisk.setSizeInMB(disk.initialSizeMB);
      newDisk.setAllocType(disk.allocationType.toString());
      newDisk.setDatastoreName(disk.datastore);
      newDisk.setDiskType(disk.type);
      newDisk.setExternalAddress(disk.externalAddress);
      newDisk.setNodeEntity(nodeEntity);
      VcVmUtil.populateDiskInfo(newDisk,vNode.getVmMobId());
    }
  }
  nodeEntity.setNodeGroup(nodeGroupEntity);
  if (insert) {
    getClusterEntityMgr().insert(nodeEntity);
  }
 else {
    getClusterEntityMgr().update(nodeEntity);
  }
  logger.info("String_Node_Str" + vNode.getVmName());
}

Fixed version (ground truth):
@Transactional private void replaceNodeEntity(BaseNode vNode){
  logger.info("String_Node_Str" + vNode.getVmName());
  ClusterEntity cluster=getClusterEntityMgr().findByName(vNode.getClusterName());
  AuAssert.check(cluster != null);
  NodeGroupEntity nodeGroupEntity=getClusterEntityMgr().findByName(vNode.getClusterName(),vNode.getGroupName());
  AuAssert.check(nodeGroupEntity != null);
  if (nodeGroupEntity.getNodes() == null) {
    nodeGroupEntity.setNodes(new LinkedList<NodeEntity>());
  }
  boolean insert=false;
  NodeEntity nodeEntity=getClusterEntityMgr().findByName(nodeGroupEntity,vNode.getVmName());
  if (nodeEntity == null) {
    nodeEntity=new NodeEntity();
    nodeGroupEntity.getNodes().add(nodeEntity);
    insert=true;
  }
  nodeEntity.setVmName(vNode.getVmName());
  setNodeStatus(nodeEntity,vNode);
  if (vNode.getVmMobId() == null && nodeEntity.getMoId() != null) {
    vNode.setVmMobId(nodeEntity.getMoId());
  }
  nodeEntity.setVcRp(rpDao.findByClusterAndRp(vNode.getTargetVcCluster(),vNode.getTargetRp()));
  nodeEntity.setIpConfigs(vNode.getIpConfigs());
  if (vNode.getVmMobId() != null) {
    nodeEntity.setMoId(vNode.getVmMobId());
    nodeEntity.setRack(vNode.getTargetRack());
    nodeEntity.setHostName(vNode.getTargetHost());
    nodeEntity.setGuestHostName(vNode.getGuestHostName());
    nodeEntity.setCpuNum(vNode.getCpu());
    nodeEntity.setMemorySize((long)vNode.getMem());
    Set<DiskEntity> diskEntities=nodeEntity.getDisks();
    DiskEntity systemDisk=nodeEntity.findSystemDisk();
    if (systemDisk == null)     systemDisk=new DiskEntity(nodeEntity.getVmName() + "String_Node_Str");
    systemDisk.setDiskType(DiskType.SYSTEM_DISK.getType());
    systemDisk.setExternalAddress(DiskEntity.getSystemDiskExternalAddress());
    systemDisk.setNodeEntity(nodeEntity);
    systemDisk.setDatastoreName(vNode.getTargetDs());
    VcVmUtil.populateDiskInfo(systemDisk,vNode.getVmMobId());
    diskEntities.add(systemDisk);
    for (    Disk disk : vNode.getVmSchema().diskSchema.getDisks()) {
      DiskEntity newDisk=nodeEntity.findDisk(disk.name);
      if (newDisk == null) {
        newDisk=new DiskEntity(disk.name);
        diskEntities.add(newDisk);
      }
      newDisk.setSizeInMB(disk.initialSizeMB);
      newDisk.setAllocType(disk.allocationType.toString());
      newDisk.setDatastoreName(disk.datastore);
      newDisk.setDiskType(disk.type);
      newDisk.setExternalAddress(disk.externalAddress);
      newDisk.setNodeEntity(nodeEntity);
      VcVmUtil.populateDiskInfo(newDisk,vNode.getVmMobId());
    }
  }
  nodeEntity.setNodeGroup(nodeGroupEntity);
  if (insert) {
    getClusterEntityMgr().insert(nodeEntity);
  }
 else {
    getClusterEntityMgr().update(nodeEntity);
  }
  logger.info("String_Node_Str" + vNode.getVmName());
}