You talk about mapping objects to the database. Another interesting aspect is mapping objects to the UI.
For languages other than Java, operator overloading is often used to simplify use of value objects. Consider something like: "Date.today + 5.days". (Ruby)
You mention overriding equals and hashCode. In Java, you often want to implement Comparable as well.