Java 使用类型仅选择具有继承的特定类。表\u每\u类策略
想象一下下面的场景,我们使用继承策略表每类和模板作为超类,而产品作为子类 模板:Java 使用类型仅选择具有继承的特定类。表\u每\u类策略,java,hibernate,jpa,jakarta-ee,jboss,Java,Hibernate,Jpa,Jakarta Ee,Jboss,想象一下下面的场景,我们使用继承策略表每类和模板作为超类,而产品作为子类 模板: @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Table(name = "Templates") @NamedQuery(name = "getAllTemplates", query = "SELECT t FROM Template t") public class Template implements Serializab
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "Templates")
@NamedQuery(name = "getAllTemplates", query = "SELECT t FROM Template t")
public class Template implements Serializable { ...}
产品:
@Entity
@Table(name = "Product")
public class Product extends Template implements Serializable { ... }
在这个场景中,我甚至认为我的DB2模板和产品中有一个。无论何时调用模板namedQuery,我都会检索产品和模板
我试着这样做:
SELECT t FROM Template t WHERE TYPE(t) = Template
但是,它返回以下错误:
该类没有描述符,或者没有使用继承或使用类提取器进行继承的描述符
是否有办法只获取模板?在使用“表每类”时,类型运算符也不适用于子类。似乎没有关于将TYPE与TABLE_PER_类一起使用的明确信息 然而,有很多帖子说这种策略效率低下,不推荐使用 JPA 2.1规范说明了每个类的表_: 在本版本中,对每个类的表映射策略的支持是可选的 这也意味着支持可能只是部分的:比如没有实现类型支持 还有一些帖子指出,Hibernate不仅会遭受这种情况,请参阅(有些很旧,但仍然如此),比如:and 因此,作为结论:
- 如果可能,更改为单表或联接策略
- 接受它
在Hibernate中,您也可以尝试使用
@DiscriminatorColumn
并将列添加到模板
实体中,但我个人认为这不值得努力。感谢您提供的信息:3很遗憾,这将允许进行大量操作。