问题描述
我有几个多态 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
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)