@Entity
@Table(name = "Users")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class User implements Serializable {
@Id
@Column(name = "UserID", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long userId;
}
@Entity
@Table(name = "Tasks")
public class Task implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "TaskID", unique = true, nullable = false)
private Long taskId;
@OneToMany(mappedBy = "task", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<UserTask> users;
}
@Entity
@Table(name = "RegularUsers")
public class RegularUser extends User {
@OneToMany(mappedBy = "regularUser", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<UserTask> tasks;
}
@Entity
@Table(name = "UserTask")
public class UserTask implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "UserTaskID", unique = true, nullable = false)
private Long userTaskId;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "UserID_FK", referencedColumnName = "UserID")
private RegularUser regularUser;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "TaskID_FK", referencedColumnName = "TaskID")
private Task task;
}