使用 JPA @Query select 时是否可以控制返回类型?

问题描述

我有几个多态 JPA 实体,我很好奇是否可以在使用 @Query 标签时进行多态选择。

我有一些实体大致具有以下关系:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class ParentObject {
    //common fields - it's CRM-like
}

@Entity
public class Childobject extends ParentObject {
    //specific fields - a particular kind of case
}

@Entity
public class ChildobjectPartDeux extends ParentObject {
    //specific fields - another kind of case
}

然后我有一个父存储库,例如:

@Repository
public interface IParentObjectRepository <T extends ParentObject> extends JpaRepository<T,Long> {
    Page<T> findAllByCommonField(Pageable page);
    @Query("SELECT p FROM ParentObject p WHERE someFiddlyConditionWhichNeedsAQueryTag")
    Page<T> aFiddlyQuery(Pageable page,Object someParameter);
}

一个定义是一种享受,从 ParentObject 继承的其他存储库和关联的存储库工作不需要提供他们自己的 Childobject 特定版本 - 它们只返回 Childobjects。

只要系统中只有一种孩子,第二个定义就可以工作,之后一切都向南。我的(可能有缺陷的)理解是,当我在 @Query 中从 ParentObject 中明确选择时,该查询在继承时也会“按原样”运行,并且没有处理程序将 ChildobjectPartDeux 转换为 Childobject。反正我也不想那样做。

现在,我正在通过覆盖子存储库中的这些 @Query 标记方法并换出对象名称解决这个问题,如下所示,但感觉应该有一种 DRY-er 方法来做这个:

@Repository
public interface IChildobjectRepository extends IParentObjectRepository<Childobject> {
    @Query("SELECT c FROM Childobject c WHERE someFiddlyConditionWhichNeedsAQueryTag")
    Page<Childobject> aFiddlyQuery(Pageable page,Object someParameter);
}

我希望的行为类似于第一种方法,即 JpaRepository 指示应返回哪些类型的项目并通知应选择哪些项目。有没有办法将它输入到 @Query 标签中?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)