hibernate查询父级

sh7euo9m  于 2021-06-27  发布在  Java
关注(0)|答案(3)|浏览(466)

我想编写一个hql查询,它选择所有 Parent 实体,基于存在于子实体上的两个不同属性。

abstract class Parent {
  int id;
  String type;
}

class ChildOne extends Parent {
  Colour colour;
}

class ChildTwo extends Parent {
  Size size;
}

我的工作查询如下所示: SELECT p FROM Parent p LEFT JOIN p.colour c LEFT JOIN p.size s WHERE c.shade = 'RED' OR s.width = 15 .
这个查询确实工作得很好,但是它当然会给我关于 colour 以及 size 上不存在 Parent 在我的join语句中。如何修复它以避免收到这些警告?
我收到的警告信息是: Can't resolve symbol 'colour' 以及 Can't resolve symbol 'size' .

qacovj5a

qacovj5a1#

我猜你看到了intellij或eclipse警告?你摆脱不了他们。另外,这是hql或hibernate特有的特性。在纯jpql中,必须使用 TREAT 运算符来访问子类型属性,但没有一个jpa实现能够正确地实现这一点,即它们引入的类型约束 predicate 在语义上是错误的。hibernate6.0将解决这个问题,但是现在,我建议您使用已有的查询并忽略警告。

qv7cva1a

qv7cva1a2#

通过使用以下查询,我能够解决问题并消除警告:

SELECT p FROM Parent p
LEFT JOIN ChildOne c1 on p = c1
LEFT JOIN ChildTwo c2 on p = c2
WHERE c1.shade = 'RED' OR c2.width = 15
zxlwwiss

zxlwwiss3#

尝试使用 @Inheritance(strategy = InheritanceType.JOINED) 在父类上

相关问题