0
すべてのSQLクエリをHibernateパラメータを使用するように変換しています。私は私のクエリにパラメータを追加し、それは常に私にエラーを与える変数とそれをマップするとき:今Hibernateが変換データ型例外をスローする
ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Error converting data type nvarchar to bigint.
私は文字列パラメータを追加しましたので、それはどんな意味がありません。
クエリは次のようになります。
Query query = session.createSQLQuery("SELECT Sum([qtyrequired]) as pcs, o.materialrequireddate, itemid "
+ "FROM [materialManagement].[pcsorderrequirement] r JOIN materialmanagement.pcsorders o "
+ "ON o.id = r.pcsorderid WHERE itemid IN (:items) "
+ "AND Cast(o.materialrequireddate AS DATE) >= Cast(Getdate() AS DATE) "
+ "AND o.materialrequireddate <= Cast(:endDate AS DATE) "
+ "GROUP BY o.materialrequireddate, itemid")
.setString("items", items).setString("endDate", endDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
私は、クエリ働く私の元に戻ったとき、それは次のようになります。私は名前付きパラメータを使用する場合は、この例外を作成することができますどのような
Query query = session.createSQLQuery("SELECT Sum([qtyrequired]) as pcs, o.materialrequireddate, itemid "
+ "FROM [materialManagement].[pcsorderrequirement] r " + "JOIN materialmanagement.pcsorders o "
+ "ON o.id = r.pcsorderid " + "WHERE itemid IN (" + items + ") "
+ "AND Cast(o.materialrequireddate AS DATE) >= Cast(Getdate() AS DATE) "
+ "AND o.materialrequireddate <= Cast('" + endDate + "' AS DATE) "
+ "GROUP BY o.materialrequireddate, itemid");
?私はHibernate 5.1を使用していて、データベースのMS SQLサーバー用です。
例外の理由は、あなたがアイテムID値のリストについては、単一の文字列パラメータを渡しているです。 SQL Serverでは、IN句の各値に個別の整数パラメータが必要です。私はHibernateでそれを行う方法に話すことができません。 –
これは1つの例ですが、INに配置されない通常の文字列値をインクルードするときも、すべてのマッピングでそれを取得します。 – JimmyD
スカラー・パラメーター値の場合、 'setDate'のような適切なデータ・タイプ・セッターを指定してください。また、クエリ述部の列に関数を適用すると、索引が効率的に使用されなくなります。リダイレクトすることを検討してください。 'キャスト(O.materialrequireddate AS DATE)=キャスト(Getdate()AS DATE) 'をo.materialrequireddate AS DATE> =キャスト(Getdate()AS DATE)'として考えてください。 –