This is probably a very naive question, but why doesn't the validator (Hibernate in this case right?) do this logic itself? After all, Hibernate is supposed to be the reference implementation, so why doesn't it follow the JSR spec, requiring us to only call validator.validate on the top level object as the original code did?