For future reference, you can save yourself a lot of typing and debugging just by relying on the
Java implementations of equals, hashCode and compareTo.
All you're doing is concatenating two strings, so do that once in the constructor, & delegate from then on - saves you a lot of code & extraneous transient string operations.
The equals method needs a couple of checks before you delegate according to the arcane rules of equals methods, but aside from that the key class becomes totally brain dead the way you want it. Another alternative is to bag creating a key class and externalizing the string concatenation, but there may be good reason to encapsulate it here (like if it gets more complex than two strings, or key creation is not well contained in one place.
(Note the below code is a fat-fingered variation on a tested key class, pardon for any typos.)