2017-07-24 82 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”字段时,它总是被使用。所以我认为你有类似的情况。