1

ストアド プロシージャの出力から Java データ型へのデータ型のマッピングに問題がある

SQLServer を使用すると、最初に次の 2 つのテーブルが与えられます - それらの定義を変更することはできません。

CREATE TABLE [dbo].[tblDetail](
    ...
[dCdeType] [dbo].[Tcde] NOT NULL,
    [dCdeState] [dbo].[Tvch] NOT NULL,
    ...
)

CREATE TABLE [dbo].[tblAP](
    ...
[apChState] [char](2) NOT NULL, 
[apChTaxType] [char](2) NOT NULL,
    ...
)

必要に応じて定義を変更できる 3 番目のテーブルを作成しました。

CREATE TABLE [dbo].[tblTempAP](
    ...
[tpChState] [char](2) NOT NULL, 
[tpChTaxType] [char](2) NOT NULL,
    ...
)

Hibernate (バージョン 3.1.3) を使用して Java アプリケーションから複数回呼び出されるストアド プロシージャ "sp_MyProcedure" があります。
ストアド プロシージャは tblDetails から選択を行い、レコードを tblTempAP に挿入します。そして、tblAP から同じことを行います

select <list of fiields> into #tempD from tblDetails
...some logic...
INSERT INTO [dbo].[tblTempAP]
       (...
       ,[tpChType]
       ,[tpChState]
        ...
  )
select <list of fields> from #TempD
............some logic .....

select <list of fiields> into #tempA from tblAP
...
    INSERT INTO [dbo].[tblTempAP]
       (...
       ,[tpChType]
       ,[tpChState]
        ...
  )
select <list of fields> from #TempA

いくつかの基準に基づいて、テーブル tblTempAP への「いくつかのロジック」に沿って「更新」が行われる可能性があります。しかし、私が質問している2つのフィールド-データ型は同じです。「sp_MyProcedure」は毎回異なるパラメータで Java からループで呼び出しているため、tblTempAP に挿入されるデータは毎回異なることが保証されています。

ストアドプロシージャの最後に、私は

select <some fileds, including the 2 mentioned> 
from tblTempAP
where <some criterias>

出力は Java で取得され、ビジネス ロジックに基づいて処理、蓄積されます。

Java コード

String queryString = "{ call sp_MyProcedure(?) }";
Query q;
    List resultList;
    try {
       q = session.createSQLQuery(queryString);
       q.setInteger(0, port);
               resultList = q.list();
    } 
    catch (HibernateException hex) {
        throw new TaxPartnersSystemException("My Exception");
    }

ここに問題があります。助けが必要です!!! アプリケーションの実行の最後に tblTempAP を設定しましたが、SQL サーバー管理スタジオで見ると問題ないように見えます。ただし、Java側のresultListのデータには問題があります-デバッガーで要素を検査して確認します-来た状態には1文字しかありません-したがって、tblTempAPの「NY」は「N」、「CA」になります-「C」になります。type フィールドも同様です。一文字のものは正解でした。ただし、「03」のようなものは「0」になり、「34」は「3」になります。

休止状態 API 内のマッピングだと思います

助けてください !!問題はどこですか?そして、それを理解する方法は?最初の 2 つのテーブルを変更することはできません。これは当然のことです。

ストアド プロシージャで Cast または Convert を使用しません。必要であれば、どこにあるか教えてください。最初の 2 つのテーブルから選択するときは? または3番目を挿入/更新するとき?

前もって感謝します

4

1 に答える 1