2017-03-23 6 views
0

私はDAO実装クラスから実行しようとしているストアドプロシージャを持っています。しかし、私は結果を得ることに失敗しています。私のリストには戻り値がnullとして表示されます。ストアドプロシージャがSQL Serverで値を返さない

ストアドプロシージャ

編集ダオ実行私の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型フィールドのsetIntegerにsetParametersを使用を変更しようとしたんが、まだ何の結果。

DefaultController.java

コントローラクラスは、サービスとサービスコールのDAOを呼び出します。サービスには、getDataメソッドと実装クラスを持つインターフェイスクラスが1つだけあります。

@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.StockSymbo[email protected] and [email protected] and [email protected] and [email protected] 
order by isnull(ftd.RowSeq,0) asc 
End 

私のパラメータは大丈夫です。デバッグモードで私はそれらを見ることができますが、私は結果セットを取得していません。

+0

同じスタジオで同じパラメータ値でストアドプロシージャを実行しようとしましたか?結果は何ですか? – ahoxha

+0

SQL管理スタジオで実行中のプロシージャは完全に値を返します。 –

+0

通話中のクラス全体を投稿できますか? – ahoxha

答えて

0

あなたが値を返さないプロシージャを呼び出すように見えます。内部でクエリを実行するだけで、関数を作成する必要があります。

+1

ストアドプロシージャの何が問題なのですか?ストアドプロシージャがどのように結果セットを返すか知っていますか? –

+0

私はそれはOracle PL/SQLに似て働くが、それは私が間違っている継ぎ目:/申し訳ありません。 –

0

これを試してみてください:

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 

あなたがチェックすることができますこの方法を実行されるもの

+0

残念ながら、それも動作していません。それは、 –

+0

とHibernateである stockSymbol AD​​BL、statementType貸借対照表、financialDataTypeId 0、fiscalYearId 16 を出力します:EXEC getOhlc?、?、?、?自分のコンソールに 私はこれがprocが実行されていることを意味します? –

+0

この呼び出しが 'EXEC getOhlc 'ADBL'、 'Balance sheet'、0,16' –

0

回答いただいたすべての方々に感謝します。問題はprocではなかった。マップの問題で、このように返されたすべての列をマップしました。

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); 

この問題は解決されました。

関連する問題