Used equals generation as Effective Java describes
Moved hashCode and equals generation steps after additional properties generation so the additional properties will be used in the hashCode and equals generation