2017-02-20 101 views
0

MyController.java如何用日期参数在hibernate中调用存储过程?

@RequestMapping(value = "/ohlc",method = RequestMethod.POST) 
public @ResponseBody List<OhlcResponse> getOhlc(@RequestBody OhlcRequest ohlcRequest) { 

    List<OhlcResponse> ohlc = ohlcService.getOhlc(ohlcRequest); 
    return ohlc; 
} 

OhlcDaoImpl.java

 Query query = session.createSQLQuery(
      "CALL uspGetOhlcData(:stockCode,:fromDate,:toDate)") 
      .addEntity(OhlcResponse.class) 
      .setParameter("stockCode", ohlcRequest.getStockSymbol()) 
      .setParameter("fromDate",ohlcRequest.getFromDate()) 
      .setParameter("toDate", ohlcRequest.getToDate()); 


     List<OhlcResponse> list = query.list(); 

     return list; 
} 

OhlcResponse.java

public class OhlcResponse { 

private int Id; 

private BigDecimal MaxPrice; 
private BigDecimal MinPrice; 
private BigDecimal PreviousClosingPrice; 
private BigDecimal ClosingPrice; 

public BigDecimal getMaxPrice() { 
    return MaxPrice; 
} 

public void setMaxPrice(BigDecimal maxPrice) { 
    MaxPrice = maxPrice; 
} 

public BigDecimal getMinPrice() { 
    return MinPrice; 
} 

public void setMinPrice(BigDecimal minPrice) { 
    MinPrice = minPrice; 
} 

public BigDecimal getPreviousClosingPrice() { 
    return PreviousClosingPrice; 
} 

public void setPreviousClosingPrice(BigDecimal previousClosingPrice) { 
    PreviousClosingPrice = previousClosingPrice; 
} 

public BigDecimal getClosingPrice() { 
    return ClosingPrice; 
} 

public void setClosingPrice(BigDecimal closingPrice) { 
    ClosingPrice = closingPrice; 
} 

存储过程:uspGetOhlcData

CREATE PROCEDURE uspGetOhlcData 
@StockSymbol varchar(50), 
@fromDate date, 
@toDate date 
AS 
BEGIN 

SELECT spd.ClosingPrice, spd.PreviousClosingPrice, spd.MinPrice, spd.MaxPrice 
FROM StockPriceDetl spd 
inner join Stock stk on stk.Id = spd.StockId 
inner join StockPriceMast spm on spm.Id = spd.MastId 
WHERE stk.StockSymbol= @StockSymbol AND spm.TranDate Between @fromDate and  @toDate 
END 
GO 

,你可以看到我的存储过程返回maxprice,minprice,previousClosingPrice和ClosingPrice。我想以json形式返回这4个数据,将它们绑定到ohlcResponse类中。

目前我得到的错误是@PO

回答

0

附近的语法不正确的语法错误,你的请求和响应似乎确定,

查询查询=执行Session.createSQLQuery( “CALL uspGetOhlcData(:stockCode, :fromDate,:toDate)“)

您正在使用此查询,并将其与Symbol StockSymbol在存储过程中的引用相同。 尝试使用存储过程中的stockCode:uspGetOhlcData

CREATE PROCEDURE uspGetOhlcData 
@stockCode varchar(50), 
@fromDate date, 
@toDate date 
AS 
BEGIN 

SELECT spd.ClosingPrice, spd.PreviousClosingPrice, spd.MinPrice, spd.MaxPrice 
FROM StockPriceDetl spd 
inner join Stock stk on stk.Id = spd.StockId 
inner join StockPriceMast spm on spm.Id = spd.MastId 
WHERE stk.StockSymbol= @stockCode AND spm.TranDate Between @fromDate and  @toDate 
END 
GO 
+0

感谢您的快速响应。现在它说 HTTP状态500 - 请求处理失败;嵌套的异常是org.hibernate.MappingException:未知的实体:com.infodev.models.OhlcResponse – sagar

+0

那么你必须使用'@ Entity'注释'OhlcResponse'类或者将它列在你的xml映射中(取决于你使用哪种方法使用)。 – coladict