MWi*_*ner 4 java hibernate jpa jpa-2.1 hibernate-5.x
我正在迁移多个代码库以使用 Hibernate 5.4.x 而不是 Hibernate 5.2.x。
对于我使用的抽象基类
@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class AbstractPersistentJPAObject extends AbstractPersistentObject {
// some properties
}
Run Code Online (Sandbox Code Playgroud)
然而,ORM 对此进行了抱怨,并显示错误消息
实体不能同时使用
@Inheritance和进行注释@MappedSuperclass
对于 Hibernate <= 5.2.x 来说这不是问题,现在我想知道为什么不再允许这样做。
欢迎任何可靠的答案。
我的回答如下:
根据JPA 2.2 规范,该映射不正确,并且不能一起使用。看起来,上面的映射在早期的 Hibernate 版本中是可以容忍的。然而,这种支持似乎在 Hibernate 5.4.x 中被删除。@MappedSuperclass@Inheritance
要解决上述特定场景中的问题,您可以替换@MappedSuperclass为@Entity,它应该可以正常工作。
Hibernate论坛中也有类似的问题。
您还可以查看HHH-13217,其中 Gail Badner 和 Vlad Mihalcea(均为 Hibernate 开发人员)正在讨论此问题。
在下一个即将发布的版本 5.4.2 中,@Inheritence如果与它一起使用,将被忽略(请参阅Github@MappedSuperclass上的相关 PR )。
| 归档时间: |
|
| 查看次数: |
2285 次 |
| 最近记录: |