Если мы примем во внимание, что это 3 разные таблицы, я бы подумал, что это будет сущность Question
@Entity
@Table("question")
public class Question
, а затем сущность SubQuestion
@Entity
@Table("sub_question")
public class SubQuestion
с ManyToOne
ассоциацией
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="QUESTION_ID")
private Question question;
и, наконец, общим c классом GenericAnswer
@Entity
@Table(name = "answer")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "question", discriminatorType = DiscriminatorType.STRING)
public class GenericAnswer {
, который будет расширен на 2 класса, QuestionAnswer
и SubQuestionAnswer
Эти 2 класса имеют столбец дискриминатора для различения guish таблицы, к которой они относятся (вопрос или вложенный_вопрос)
@DiscriminatorValue("question")
@Entity
public class QuestionAnswer extends GenericAnswer {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="QUESTION_ID")
private Question question;
и
@DiscriminatorValue("sub_question")
@Entity
public class SubQuestionAnswer extends GenericAnswer {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="QUESTION_ID")
private SubQuestion subQuestion;
Надеюсь, это вам поможет.