Might be too late, but me also faced the same problem.
Actually this is somehow in the implementation of Hibernate, see: https://issues.jboss.org/browse/AS7-4576, and https://hibernate.atlassian.net/browse/HHH-7288 says it won't fix. Might be this feature (validation upon first call) will work on EclipseLink, but I haven't tried it.
In order to workaround this, I used a bit changed logic, in my service layer before calling merge or persist I run the following:
Set<ConstraintViolation<Contact>> validations = validator.validate(data);
if (validations.size() > 0) {
Map<String, String> messages = new HashMap<>();
for (ConstraintViolation v : validations) {
messages.put(v.getPropertyPath().toString(), v.getMessage());
}
return Response.status(Response.Status.BAD_REQUEST).entity(messages).build();
}
Where validator is simple injection in my bean:
@Inject
Validator validator;