@MappedSuperclass @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public interface ExerciseInterface { public abstract byte[] getImage(); public abstract void setImage(byte[] image); public abstract String getName(); public abstract String getReferenceUrl(); public abstract void setName(String name); public abstract void setReferenceUrl(String referenceUrl); @ManyToOne public abstract ExerciseCategory getExerciseCategory(); public abstract void setExerciseCategory(ExerciseCategory exerciseCategory); public abstract String getDescription(); public abstract void setDescription(String description); @Id public abstract Long getId(); public abstract void setId(Long id); } package zeuzgroup.core.exercise; import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; @Entity @AttributeOverrides( { @AttributeOverride(name = "version", column = @Column(insertable = false, updatable = false)), @AttributeOverride(name = "id", column = @Column(insertable = false, updatable = false)) }) public class ExerciseDuration extends ExerciseBase implements ExerciseInterface { public ExerciseDuration() { super(null); } @Embedded private Duration duration; public ExerciseDuration(ExerciseCategory exerciseCategory) { super(exerciseCategory); } public Duration getDuration() { return duration; } public void setDuration(Duration duration) { this.duration = duration; } } package zeuzgroup.core.exercise; import java.util.ArrayList; import java.util.List; import javax.persistence.Entity; import javax.persistence.OneToMany; import zeuzgroup.core.BaseEntity; @Entity public class ExerciseCategory extends BaseEntity { private String name; @OneToMany(mappedBy = "exerciseCategory") private List exercises = new ArrayList(); public ExerciseCategory(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List getExercises() { return exercises; } public void setExercises(List exercises) { this.exercises = exercises; } public ExerciseCategory() { } }