3.3.0.GAからHibernate 3.6.5.Finalに更新され、XMLマッププロパティのSQL式呼び出しで問題が発生しました。3.6.5への更新後にHibernate mappedプロパティがSQL式に失敗しました
<property
name="endDate"
type="java.util.Date"
formula="TIMESTAMPADD(SECOND, (quantity*60*60), transactionDate)"
/>
* .xml.hbmでは何も変更されておらず、データベース設計も変更されていません。以前、私のendDateにはきちんと計算したところ、私は今MySQLSyntaxErrorException
を得る:this_.SECOND
はSECOND
する必要があることに
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'this_.SECOND,(this_.quantity*60*60),this_.transactionDate) as formula0_0_ from t' at line 1
問題はかなり明白です。 Hibernateは式としてを静的に渡されたパラメータとして認識せず、したがってテーブル内の列でなければならないと考えます。私はそれが使用する必要があります冬眠を教える方法がわからないSECOND
です。
ダイアレクトではregisterFunction
とregisterKeyword
を試しましたが、HQL関数定義に関連しているように見えますが、数式でここで使用されているネイティブSQLとは思われません。
誰かが正しい方向に私を指し示すことができますか、またはこれらのバージョン間でHibernateが異なることを教えてください。どうすれば修正できますか?
のMySQL 5.0拒否このクエリ: 'TIMESTAMPADD選択します( "第二"、60は、CURRENT_DATE())=>あなたは "第二"」近くにあなたのSQL構文でエラーが発生しています...'。 Hibernateは引用符を削除することに注意します。おそらくMSSQLはより柔軟です:) –
私はあなたが正しいトラックに私を持っていると思います。私は二重引用符と一重引用符を試しましたが、うまくいきませんでした。しかし[この記事] [1]では、[SECOND]を使って提案しています。別のプロジェクトの締め切りのため、私は明日の休止状態の更新ブランチに戻って、それがうまくいけば教えてくれます。 [1]:http://www.mkyong.com/hibernate/how-to-use-database-reserved-keyword-in-hibernate/ – joostschouten