私は Hibernate を使用していますが、単純な SQLQuery を実行しているため、これは基本的な JDBC の質問に要約されると思います。私の運用アプリは MySQL で実行されますが、私のテスト ケースはメモリ内 HSQLDB を使用します。SELECT COUNT 操作は、MySQL からは BigInteger を返しますが、HSQLDB からは Long を返します。
MySQL 5.5.22 HSQLDB 2.2.5
私が思いついたコードは次のとおりです。
SQLQuery tq = session.createSQLQuery(
"SELECT COUNT(*) AS count FROM calendar_month WHERE date = :date");
tq.setDate("date", eachDate);
Object countobj = tq.list().get(0);
int count = (countobj instanceof BigInteger) ?
((BigInteger)countobj).intValue() : ((Long)countobj).intValue();
戻り型のこの問題は、 hibernate で createSQLQuery を使用して count(*) を取得するなど、他の SO の質問に対する回答を無効にしますか? setResultTransformer
戻り値を Bean にマップするためにアドバイスが使用される場所。Bean のタイプは BigInteger または Long である必要があり、タイプが正しくない場合は失敗します。
データベースの相互運用性を恐れて、SQL の 'COUNT(*) AS count' 部分でキャスト演算子を使用することに消極的です。私はすでに使用してcreateSQLQuery
いることに気付いているので、データベースの中立性を求める Hibernates の試みの範囲を超えていますが、以前はデータベースの制約に関して MySQL と HSQLDB の違いに問題がありました。
何かアドバイス?