- PR -

HibernateにおけるDBデータ型⇔Java変数型のマッピングについて

1
投稿者投稿内容
SOA
会議室デビュー日: 2006/06/02
投稿数: 3
投稿日時: 2006-06-02 20:09
お世話になってます。

Hibernateで以下のようなHQLを発行したときに、
結果として戻ってくるList型中身は、Object配列に
なるわけですが、Object配列の各要素に対応する
Java変数型を指定することは可能なのでしょうか?

下記の例ですと、colsBのがBigDecimal型で入れられ
てしまいます。これをFloat型で戻したいのですが・・・。

デフォルトのマッピングを設定できるような対処方法を
ご存知でしたら、ご教授頂けると助かります。

【HQL】
select a.id, a.colsB, a.colsC from MappingView a

【View構造】
  Cols_A : NUMBER(
  Cols_B : NUMBER(6,2)
  Cols_C : VARCHAR

【使用環境】
APServer : Tomcat5.5.9
DB : MySQL5.0.19
FrameWork : Struts1.2.8
  SpringFramework1.2.6
Hibernate3.1
SOA
会議室デビュー日: 2006/06/02
投稿数: 3
投稿日時: 2006-06-02 20:11
顔文字が出てしまったので訂正します。
失礼しました。
【View構造】
  Cols_A : NUMBER(8)
  Cols_B : NUMBER(6,2)
  Cols_C : VARCHAR
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2006-06-03 10:27
***.hbm.xmlのCols_Bのところの型をfloatにしたらどうなります?
SOA
会議室デビュー日: 2006/06/02
投稿数: 3
投稿日時: 2006-06-03 18:52
返信ありがとう御座います。

いろいろ試していたところ、*.hbm.xml上でFloatで
定義されていたカラムは正常にFloatで返ってきておりました。

実際に問題の起こったコードでは、以下のようにコンストラクタを
使用してBeanに値を入れるように記述してまして、戻り型に合う
コンストラクタが見つからないとExceptionが出ておりました。

日付型カラムで、*.hbm.xml上はjava.sql.Dateで定義していたの
ですが、どうもjava.util.Dateで返ってきているようでした。

下記HQLにおけるResultBeanにおけるフルコンストラクタの定義は
*.hbm.xml にあわせて以下のようになっております。

【ResultBeanコンストラクタ】
 public ResultBean(Integer colsA, Float colsB,
           String colsC, java.sql.Date colsD)

これをjava.sql.Date⇒java.util.Dateに変更したところ、
正常に動作いたしました。

別段、java.util.Dateでも仕様上まったく問題ないのですが、
java.sql.Date型だけ *.hbm.xml で定義されている型通りに
値が返ってこないのはちょっと解せない気がします。

この辺のHibernateの挙動についてご存知の方、ご教授頂ければ幸いです。

【HQL】
 select new ResultBean(a.id, a.colsB, a.colsC, a.colsD) from MappingView a

【View構造】
  Cols_A : NUMBER(8)
  Cols_B : NUMBER(6,2)
  Cols_C : VARCHAR
  Cols_D : TIMESTAMP(うろ覚え。DATETIMEだったかもしれません)
1

スキルアップ/キャリアアップ(JOB@IT)