improved product domain object:equals & hashcode