Java JPA继承查询(Eclipse链接)

Java JPA继承查询(Eclipse链接),java,postgresql,jpa,eclipselink,Java,Postgresql,Jpa,Eclipselink,考虑以下模式: 公共A类{ @身份证 int-id; 弦场; } 公共类B扩展了{ 字符串字段B; } public类扩展了{ 字符串字段c; } 我如何以这种方式查询A,以获取所有C,并仅获取B,其中fieldB=“someValue” 我曾尝试使用treat来制作downcast,但B上的过滤器似乎正在处理所有父类(A) 首先可以进行这样的查询吗?您可以创建一个带有“type”关键字的查询以按类型进行筛选,并创建一个exists子查询以筛选C实体: select a from A a

考虑以下模式:

公共A类{
@身份证
int-id;
弦场;
}
公共类B扩展了{
字符串字段B;
}
public类扩展了{
字符串字段c;
}
我如何以这种方式查询
A
,以获取所有
C
,并仅获取
B
,其中
fieldB=“someValue”

我曾尝试使用treat来制作downcast,但
B
上的过滤器似乎正在处理所有父类(
A


首先可以进行这样的查询吗?

您可以创建一个带有“type”关键字的查询以按类型进行筛选,并创建一个exists子查询以筛选C实体:

select a
from A a
where type(a) = :type
or exists (
  select 1
  from B b
  where b.id = a.id
  and b.fieldB = :fieldB
)

实体C的类类型是通过调用查询实例的setParameter方法来传递的。

您可以创建一个带有“type”关键字的查询以按类型筛选,并创建一个exists子查询以筛选C实体:

select a
from A a
where type(a) = :type
or exists (
  select 1
  from B b
  where b.id = a.id
  and b.fieldB = :fieldB
)

实体C的类类型是通过调用查询实例的setParameter方法来传递的。

对于exists子句,您应该使用OR而不是AND。是的,我使用了更相似的方法解决了这个问题,但是否有内置命令来解决它。实际上我有5个类继承了主类,我在每个子类中做了2-3个过滤器。使用或与类型一起使用会导致出现一个monster查询(这肯定会影响性能),您应该为exists子句使用或而不是AND。是的,我使用了更相似的方法解决了这个问题,但是否有内置命令来解决它。实际上我有5个类继承了主类,我在每个子类中做了2-3个过滤器。使用或与类型一起使用将导致我进入一个monster查询(这肯定会影响性能)