ストアド プロシージャの出力から 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番目を挿入/更新するとき?
前もって感謝します