I just wanted to know which one is more critical as there is no direct relation between them and Hold time is taken care in complex designs automatically.
Either violation will cause a failure; one is not 'worse' than the other. If you violate either constraint then you can't know what the output of a register will be.
hold is more critical now a days. You should fix hold first and then concentrate on the setup violation. In worst case let's assume you can not able to fix the setup violation , then you can slow down you chip/design and it will work. At least there will be no functional violation only your chip will be little slow.
For more detail I will prefer you to read the series of following post.