The problem in JPA is that is has no built-in functions to generate and ID, either UUID (which is slow and I avoid it) or from DB sequence. It has autogenerated properties, but they are only useful after you create an object. And in practice I rarely meet "natural ids", most ids are surrogate.