/** * A base entity which has an id and uuid for ease of definig hash/equals * for an entity. */ @MappedSuperclass public abstract class BaseEntity { @Id @SequenceGenerator(name = "sequence", sequenceName = "film_actor_sequence", allocationSize = 1) @GeneratedValue(generator = "sequence") private Integer id; private String uuid = UUID.randomUUID().toString(); // id getter and hash/equals ommitted } // Film mapping @Entity @Table(name = "film") public class Film extends BaseEntity { private String name; private Duration length; } // Actor mapping @Entity @Table(name = "actor") public class Actor extends BaseEntity { private Name name; } // And simple embeddable for Name: @Embeddable @Access(AccessType.FIELD) public class Name { @Column(name = "first_name") private String firstName; @Column(name = "last_name") private String lastName; }