I'm not sure I understand the problem entirely, but to me, it seems you want category object present in the model when you display the form, but don't want it to be changed with form post?
When you specify @ModelAttribute("categories") in argument list you basically tell spring MVC to bind form data to the annotated object using the parameter name "categories".
If you don't want the object to be bound just leave it out from the parameters list. If you need the original object in the handler method fetch it manually by calling addCategory and providing id mapped with @PathVariable:
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(
@ModelAttribute @Valid Email email,
BindingResult result,
Model model,
@PathVaribale("categoryId") UUID categoryId
) {
// saving entity, etc
return String.format("redirect:/emails/%s/", categoryId.toString());
//if category object is needed and not just id then fetch it with Category c = addCategory(categoryId).
}
(PS. If you register a converter that converts Long to Category using categoryService you can also put @PathVariable("categoryId") Category category
to map Category object to path variable instead of UUID, if you'd like that take look at 7.5.5 Configuring a ConversionService)
(EDIT: removed suggestion to name model differently as that will not help as noted in comments, and added example)
Personally, if I needed this kind of behavior (an object that needs to be present in the form when displaying the form, but not bound to it when form is posted) I would not use ModelAttribute annotated method to populate the model. Instead, I'd populate the model manually when displaying the form. That is a bit more code (well, one line actually) but is less magical and easier to understand.