我有一个存储过程,我试图从DAO实现类中执行它。但我没有得到任何结果。在我的列表中,我看到返回值为null。
我的DAO代码,它执行存储过程
编辑的Dao:
@Repository
public class OhlcDaoImpl implements OhlcDao {
@Autowired
SessionFactory sessionFactory;
Session session;
public List getOhlc(Result result) {
session = sessionFactory.openSession();
SQLQuery query = session.createSQLQuery("EXEC getOhlc :stockSymbol, :statementType, :financialDataTypeId, :fiscalYearId");
query.setString("stockSymbol",result.getStockSymbol());
query.setString("statementType",result.getStatementType());
query.setInteger("financialDataTypeId",result.getFinancialDataTypeId());
query.setInteger("fiscalYearId",result.getFiscalYearId());
List l = query.list();
return l;
}
}我试图将int字段的int参数更改为setInteger,但仍然没有结果。
DefaultController.java
控制器类调用服务,服务调用dao。服务只有一个带有getData方法的接口类和一个实现类。
@RequestMapping(value = "/getData",method = RequestMethod.POST)
public List getData(@RequestBody Result result){
List l =ohlcService.getData(result);
return l;
}我的存储过程
USE [Wealth_1_0_0_Srv]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[getOhlc]
(
@stockSymbol varchar(50),
@statementType varchar(50),
@financialDataTypeId int,
@fiscalYearId int
)
As
Begin
Set Nocount on;
Set Arithabort on;
Select fdd.FinancialHeadId,isnull(ftd.FinancialHeadText,fh.FinancialHeadName)FinancialHeadName,fdd.Value,isnull(ftd.Bold,0)Bold,isnull(ftd.RowSeq,0)RowSeq
from FinancialDataMast fdm
inner join FinancialDataDetl fdd on fdd.MastId=fdm.Id
inner join FinancialHeading fh on fh.Id=fdd.FinancialHeadId
inner join Stock s on s.Id=fdm.StockId
INNER JOIN StatementType st ON st.Id = fdm.StatementTypeId
left outer join FinancialTemplateMast ftm on ftm.StatementTypeId=fdm.StatementTypeId and ftm.SectorId=s.SectorId and ftm.FinancialReportType=(Case fdm.FinancialDataTypeId when 0 then 2 else 1 end)
left outer join FinancialTemplateDetl ftd on ftd.MastId=ftm.Id and ftd.FinancialHeadId=fdd.FinancialHeadId
where s.StockSymbol=@stockSymbol and st.StatementTypeName=@statementType and fdm.FinancialDataTypeId=@financialDataTypeId and fdm.FiscalYearId=@fiscalYearId
order by isnull(ftd.RowSeq,0) asc
End我的参数很好。在调试模式下,我可以看到它们,但我没有得到任何结果集。
发布于 2017-03-23 15:24:27
它看起来像是在调用过程,它不返回值--只需在内部执行查询,就应该创建函数。
发布于 2017-03-23 16:18:44
试试这个:
System.out.println(String.format("stockSymbol %s, statementType %s, financialDataTypeId %d, fiscalYearId %d", result.getStockSymbol(), result.getStatementType(), result.getFinancialDataTypeId(), result.getFiscalYearId()));
SQLQuery query = session.createSQLQuery("EXEC getOhlc :stockSymbol, :statementType, :financialDataTypeId, :fiscalYearId");
query.setString("stockSymbol",result.getStockSymbol());
query.setString("statementType",result.getStatementType());
query.setInteger("financialDataTypeId",result.getFinancialDataTypeId());
query.setInteger("fiscalYearId",result.getFiscalYearId());
List l = query.list();请在hibernate配置中添加以下行:
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>或者如果您使用log4j,请添加以下内容:
log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout这样,您就可以检查执行了什么。
发布于 2017-03-24 11:03:46
感谢所有回答的人。这一问题没有得到解决。它是映射问题,所以我映射了所有返回的列,如下所示
query.addScalar("FinancialHeadId", IntegerType.INSTANCE);
query.addScalar("FinancialHeadName", StringType.INSTANCE);
query.addScalar("Value",IntegerType.INSTANCE);
query.addScalar("Bold",IntegerType.INSTANCE);
query.addScalar("RowSeq",IntegerType.INSTANCE);问题解决了。
https://stackoverflow.com/questions/42978260
复制相似问题