Hibernate _can_ use composite keys its just the hibernate people think they are a bad idea. In the docs it says this for example:
Quote:
If you've fully embraced our view that composite keys are a bad thing and that entities should have synthetic identifiers (surrogate keys), ...
It certainly complicates your mappings and has some undesirable side effects, like the issuing of a select before an insert to determine if an object should be inserted or updated.
You should use a simple surrogate primary key like a Long for example, and map the other fields as properties. If you have data that should be unique you can still define a unique constraint across these fields to ensure data integrity. And of course, you can always query for instances using the fields that would have been in your composite pk.
saveOrUpdate works perfectly well with a surrogate key.