Hibernate Native Query を使用して DB2 CHAR フィールドからデータをフェッチしているときに、次の問題に直面しています。
次のようなテーブル構造とデータがあります。
CNTRL_4 COLUMN_ID PARAM
------- --------- --------------------
1 1 10
1 2 12
1 3 true
2 1 10
2 2 13
2 3 false
3 1 10
3 2 16
3 3 true
CNTRL_4 と COLUMN_ID は数値ですが、PARAM は CHAR(10) です。次のクエリを手動で (Eclipse SQL プラグインから) 実行すると、適切な結果が取得されます。
SELECT CNTRL_4, COLUMN_ID, VALUE AS PARAM FROM MY_TABLE_NAME
しかし、Java コード (Hibernate Native Query) で同じクエリを実行すると、次の結果が得られます。
[{CNTRL_4=1, COLUMN_ID=1, PARAM=1},
{CNTRL_4=1, COLUMN_ID=2, PARAM=1},
{CNTRL_4=1, COLUMN_ID=3, PARAM=t},
{CNTRL_4=2, COLUMN_ID=1, PARAM=1},
{CNTRL_4=2, COLUMN_ID=2, PARAM=1},
{CNTRL_4=2, COLUMN_ID=3, PARAM=f},
{CNTRL_4=3, COLUMN_ID=1, PARAM=1},
{CNTRL_4=3, COLUMN_ID=2, PARAM=1},
{CNTRL_4=3, COLUMN_ID=3, PARAM=t}]
PARAMデータを見てください。最初の文字だけです。
次のJavaコードを使用しています
String sql = "SELECT CNTRL_4, COLUMN_ID, VALUE AS PARAM FROM MY_TABLE_NAME";
SQLQuery query = hibernateUtil.getCurrentSession().createSQLQuery(sql);
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List<Map<String, Object>> data = (List<Map<String, Object>>) query.list();
System.out.println(data);
Google でも検索したところ、このブログ投稿が見つかりました。これは私の問題と同じです。覚えている限り、SQLクエリで型キャストすることでこの問題を解決しました。しかし、今は自分がしたことを忘れてしまい、今では解決できません。
助けてください。
更新: 型キャストによって解決された問題。私の答えを見てください。