/**
 * 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;
}