In Bean Validation, property-level annotations are generally placed on the getter. The difference between annotating a field or the corresponding JavaBeans getter method is that in case of the latter the getter will be invoked by the validation engine to obtain the value, while in the first case the field value is accessed directly. This can make a difference if your getter does any sort of additional calculation etc.
Regarding your second question, yes the associated contact will always be validated when validating the parent object, there is no check for changes or similar.