【发布时间】:2017-12-30 13:51:18
【问题描述】:
我正在尝试将现有的 Ruby on Rails/Active Record 组件转换为 Springboot/JPA/Hibernate 堆栈。
有一个实体模型,其中多个不相关的类型都可以应用 cmets。
在 Rails 世界中,这是通过模型内的多态关系来实现的。从数据库的角度来看,这意味着我有一个带有“commentable_id”和“commentable_type”的评论表,它们指向拥有评论的实体类型和 id。
我计划拥有一个抽象类“CommentableEntity”,所有需要支持 cmets 的实体都将扩展它。
我尝试过应用不同的继承策略,但找不到最合适的一种: - 单个表不起作用,因为具有 cmets 的实体具有不应该在同一个表中的不同属性 - 加入表感觉很尴尬,因为仅用于 CommentableEntity 的表只有一个 ID 字段(是这些实体之间唯一的共享字段)
还有其他方法可以实现这一点吗?我试图避免使用单独的多对多表模型。 apple_cmets、orange_cmets 等或单独的评论表,如 apple_comment(带有 apple_id)、orange_comment(带有 orange_id)等。
感谢您的任何建议!
【问题讨论】:
-
如果您想出了一个解决方案,遇到完全相同的问题并遇到您提到的所有困难,请告诉我们!
标签: java hibernate jpa polymorphism