Implement context-specific validation through Validation Groups
Sometimes, validation should only be executed on persist, sometimes on the controller invocation. Especially when building multi-step forms, one needs to be able to partially validate an object and store the invalid object in the database.
I'd suggest the concept of "Validation Groups" from Symfony: http://symfony.com/doc/current/book/validation.html#validation-groups
Each Validate annotation can get one or multiple validationGroups assigned; the "Default" validation group is used if none is specified.
When validating in the persistence layer, we use "Default" and "Persistence" as validation group; i.e. only validators which have either Default or Persistence assigned as validationGroup get executed.
When being inside a controller invocation, the used validation groups should be configurable; using "Default", "Controller" if none is specified.