This is really weird Fabio.
So you have a Map<Book, Integer> with one element - entry1 which key hashCode yields to 1 and equals always returns true.
Then you have a Book instance - b1 which hashCode yields to 1 and equals always returns true.
In this way you ask the Map<Book, Integer> for an entry with key b1. The hashCode == 1, so the bucket in the map is located correctly; the equals always returns true, so the element must be properly returned...
Can it be some caching problem between you changing the code, deploying it on the server and running again?
Saying it all - it seems like a problem not related with the JPA / persistence / database.