2017-07-24 84 views
0

我試圖將現有的Ruby on Rails/Active Record組件轉換爲Springboot/JPA/Hibernate堆棧。JPA /休眠 - 多態多對一關係設計

有一個實體模型,其中多個不相關的類型都可以應用註釋。

在Rails的世界裏,這是通過模型中的多態關係實現的。從數據庫的角度來看,這意味着我有一個帶有'commentable_id'和'commentable_type'的註釋表,它指向實體類型和擁有註釋的id。

我打算有一個抽象類'CommentableEntity',所有需要支持註釋的實體都會擴展。

我試過應用不同的繼承策略,但找不到適合正確的一個: - 單表不起作用,因爲具有註釋的實體具有不應該在同一個表中的不同屬性 - 聯合表感到尷尬,因爲只爲CommentableEntity的表只會有一個ID字段(是這些實體中唯一的共享字段)

是否有另一種方法來實現這一點?我試圖避免一個單獨的多對多表格模型。 apple_comments,orange_comments等或單獨的評論表,如apple_comment(帶有apple_id),orange_comment(帶有orange_id)等。

感謝您的任何建議!

回答

0

「我打算有一個抽象類‘CommentableEntity’,這是需要支持意見的所有實體將延長」

您可以準確地使用繼承。只需使用@MappedSuperclass註釋來註釋'CommentableEntity',該註釋會將此實體定義爲父實體。當你需要父類包含「id」,「version」,「createdAt」和「updatedAt」字段時,它總是被使用。所以我認爲你有類似的情況。