【发布时间】:2013-12-22 11:09:54
【问题描述】:
我正在尝试在超类上构建查询,并且可以选择引用子类的属性(如果对象是该子类的实例)。
EclipseLink wiki 说我应该使用 superClassRoot.as(Subclass.class).get("subclassField"),但它会引发异常:属性 ... 来自托管类型 ...[DatabaseTable(SUPER_CLASS)]不存在。类映射为@Inheritance(strategy = InheritanceType.JOINED),因此子类有自己的表。
我的期望是 EL 会为子表创建一个外连接,并有选择地引用这些连接的列。
【问题讨论】:
-
认为这与stackoverflow.com/questions/6903783/… 相同(不幸的是没有正确答案)
-
为什么不直接检索根实体?子类的实例也将被返回,这些实例将具有所需的属性。即“从 BaseEntity b where..中选择 b”将返回 BaseEntity 及其所有子类的实例。这比“Select b.name, c.something, d.somethingElse from..”简单得多,它不会按照您期望/想要的方式工作。这是可能的,但会涉及额外的看似不必要的表连接,因为 JPQL 是围绕对象而不是表设计的。
-
我选择单个字段是因为我选择的是不同的实体,有点像平面表映射的类层次结构(以及一些连接的类)。
标签: jpa eclipselink criteria