JPA / Hibernate - 多态多对一关系设计

时间:2017-07-24 20:42:22

标签: java hibernate jpa polymorphism

我正在尝试将现有的Ruby on Rails / Active Record组件转换为Springboot / JPA / Hibernate堆栈。

有一个实体模型,其中多个不相关的类型都能够将注释应用于它们。

在Rails世界中,这是通过模型中的多态关系来实现的。从数据库的角度来看,这意味着我有一个带有'commentable_id'和'commentable_type'的注释表,它指向实体类型和拥有注释的id。

我计划有一个抽象类'CommentableEntity',所有需要支持注释的实体都会扩展。

我尝试过应用不同的继承策略但找不到合适的继承策略: - 单个表不起作用,因为具有注释的实体具有不应在同一个表中的不同属性 - 连接表感觉很尴尬,因为只有CommentableEntity的表只有一个ID字段(这些实体中唯一的共享字段)

还有另一种方法可以达到这个目的吗?我试图避免使用单独的多对多表格的模型。 apple_comments,orange_comments等或单独的注释表,如apple_comment(带有apple_id),orange_comment(带有orange_id)等。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

“我计划有一个抽象类'CommentableEntity',所有需要支持评论的实体都会延伸”

你可以准确地使用继承。只需使用@MappedSuperclass注释注释'CommentableEntity',它将此实体定义为父实体。当您需要父类包含“id”,“version”,“createdAt”和“updatedAt”字段时,始终使用它。所以我认为你有类似的情况。