我想将sql查询转换为基于Spring Data JPA的查询

时间:2016-12-31 10:10:52

标签: java spring spring-data-jpa

根据我的SQL查询:

//your items
ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
items.add(new OverlayItem("Title", "Description", new GeoPoint(0.0d,0.0d))); // Lat/Lon decimal degrees

//the overlay
ItemizedOverlayWithFocus<OverlayItem> mOverlay = new ItemizedOverlayWithFocus<OverlayItem>(items,
    new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
    @Override
    public boolean onItemSingleTapUp(final int index, final OverlayItem item) {
    //do something
        return true;
    }
    @Override
    public boolean onItemLongPress(final int index, final OverlayItem item) {
        return false;
    }
});
mOverlay.setFocusItemsOnTap(true);

mMapView.getOverlays().add(mOverlay);

我想将Spring Data JPA与内置方法一起使用,例如 findBy ---(),它将返回与上述sql查询相同的结果

我尝试了JPQL查询:

SELECT
  maker_code
FROM
  maker
WHERE
  part_no = p_part_no
AND effect_date_in <= TODAY
AND effect_date_out > TODAY 
AND effect_date_in = (SELECT MAX(effect_date_in) FROM maker WHERE part_no =p_part_no)

但我收到一个错误: 在这种情况下,聚合使用不当。

1 个答案:

答案 0 :(得分:1)

您无法从嵌套查询中访问别名p以获取聚合函数,例如MAX。嵌套查询必须有自己的表别名。类似的东西:

 @Query(value = "
    SELECT p FROM Pg6p0012_01PurpartQueryModel p where p.partNo = :p_part_no AND 
    p.effectDateIn <= TODAY AND p.effectDateOut > TODAY AND p.effectDateIn = 
    (SELECT MAX(p2.effectDateIn) FROM Pg6p0012_01PurpartQueryModel p2 WHERE partNo =:p_part_no)"
 )