code: func (r *GormRepository) LoadMany(ctx context.Context, IDs []uuid.UUID) ([]Space, error) {
  	defer goa.MeasureSince([]string{"goa", "db", "space", "loadMany"}, time.Now())
  	// no need to run the query if the list of IDs is empty :)
  	var result []Space
  	if len(IDs) == 0 {
  		return result, nil
  	}
  	strIDs := make([]string, len(IDs))
  	for i, ID := range IDs {
  		strIDs[i] = fmt.Sprintf("'%s'", ID.String())
  	}
  
  	db := r.db.Model(Space{}).Select("distinct *").Where(fmt.Sprintf("ID in (%s)", strings.Join(strIDs, ", ")))
  	rows, err := db.Rows()
  	defer closeable.Close(ctx, rows)
  	if err != nil {
  		log.Error(ctx, map[string]interface{}{
  			"err": err.Error(),
  		}, "unable to load multiple spaces by their IDs")
  		return nil, errors.NewInternalError(ctx, err)
  	}
  	// scan the results
  	for rows.Next() {
  		s := Space{}
  		err := db.ScanRows(rows, &s)
  		if err != nil {
  			log.Error(ctx, map[string]interface{}{
  				"err": err.Error(),
  			}, "unable to load space")
  			return nil, errors.NewInternalError(ctx, err)
  		}
  		result = append(result, s)
  	}
  	log.Debug(ctx, map[string]interface{}{
  		"count":  len(result),
  		"spaces": result,
  	}, "loaded multiple spaces by their IDs")
  	return result, nil
  }
docs: // LoadMany returns the spaces for the given IDs
  // returns NotFoundError or InternalError