我有以下繼承鏈:不能由根類與JPA(休眠)連接繼承鏈負荷實體
@MappedSuperclass
public abstract class AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
Long id;
}
@Entity
@Table(name = "answers")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Answer extends AbstractEntity {
}
@Entity
@Table(name = "chosen_answers")
@PrimaryKeyJoinColumn
public class ChosenAnswer extends Answer {
@ManyToOne(optional = false)
@NotNull
AnswerChoice answerChoice;
}
@Entity
@Table(name = "free_text_answers")
@PrimaryKeyJoinColumn
public class FreeTextAnswer extends Answer {
String answerText;
}
我的數據庫(簡化)示例內容如下:
答案:
--id ---
| 100 |
free_text_answers:
--id ---- answer_text--
| 100 | 「一些文字」|
創建了從0到answers(id)
的外鍵。 的問題是,實體管理器下面的語句返回null
:
em.find(Answer.class, 100l); // returns null
雖然,100是用於存儲回答一個有效的身份證件。如果我查詢實體經理FreeTextAnswer
的實例,我會得到預期的結果。
em.find(FreeTextAnswer.class, 100l) // returns stored entity
奇怪的是,只要我查詢子類型的實體管理器,第一條語句也返回請求的實體。
這是預期的結果嗎?如果是的話,我如何設計我的繼承鏈來按我喜歡的方式工作?
我正在使用Spring Data Rest,並且我只通過RestRepository公開Answer
實體,因此Spring Data Rest將實體管理器作爲預期實體調用Answer
。
有意思。順便說一下,你用什麼工具爲圖表?是Intellij?thx –
是的,我用IntelliJ創建了該圖。 但是,IntelliJ使用引擎蓋下的yFiles(如水印所示)。 –