我想编写一个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'
.
3条答案
按热度按时间qacovj5a1#
我猜你看到了intellij或eclipse警告?你摆脱不了他们。另外,这是hql或hibernate特有的特性。在纯jpql中,必须使用
TREAT
运算符来访问子类型属性,但没有一个jpa实现能够正确地实现这一点,即它们引入的类型约束 predicate 在语义上是错误的。hibernate6.0将解决这个问题,但是现在,我建议您使用已有的查询并忽略警告。qv7cva1a2#
通过使用以下查询,我能够解决问题并消除警告:
zxlwwiss3#
尝试使用
@Inheritance(strategy = InheritanceType.JOINED)
在父类上