You probably know this situation: Your customer asks for “just a tiny, little change”. After a few hours … or days … you recognize that you can’t implement it that easily. You probably start thinking: “I can’t be the first who tries to implement this!” And you’re probably right. Hibernate provides a lot of lesser-known features that help you to implement common requirements quickly. The problem is that most developers don’t know about them. They spend days creating their own solution when it just takes an annotation or a few lines of code to: implement multi-tenancy support a database-specific data type map an SQL-snippet instead of a database column to an entity attribute retrieve the elements of a mapped association in a defined order generate UUIDs as primary keys write an audit log documenting all changes performed on an entity and more …