There are some algorithms that can be used for PK generation, please have a look at:
www.hibernate.org/.../mapping.html
Some of them can be used on specific databases, while others like 'increment' can be used for all databases. There are some performance considerations with this approach.