我在Hibernate中使用JPA 2。有两个实体类,CardElementIdentityDocumentKind。最后一个是第一个的继承实体。使用SINGLE_TABLE继承策略。当我尝试通过查询from CardElement where id = '123456'选择父类的实例时,发生以下错误:


ID:123456的对象不是指定的子类:
org.cp.cardsystem.CardElement(区分符:SDocClass)


我没有“ SDocClass”鉴别符值的子类。实际上,在开发IdentityDocumentKind的时刻,CardElement的类查询已在整个应用程序中广泛使用。因此,我无法为每个鉴别符值创建CardElement的子类,并在所有现有查询中用它替换CardElement。对我来说,这将花费太多的精力。使用SINGLE_TABLE继承策略时,是否可以实例化父实体类?

最佳答案

我不确定我是否正确理解您的问题。您正在使用单表策略来存储整个继承层次结构。但是,您仅映射了一些标识符,这一次是导致问题的未映射标识符(因为Hibernate dunno子类的含义)。我能正确理解您的问题吗?

考虑针对特殊的数据库视图而不是实际表进行工作。该视图仅公开您可以处理的带有鉴别符的记录。

10-07 21:04