0

私が得るエラー:

ERROR 42821: Columns of type 'BOOLEAN' cannot hold values of type 'INTEGER'.

JPQLクエリの場合:

SELECT b.id FROM Bar b WHERE b.latest = true

どうやらHibernateがブールフィールド(つまり「最新」)をJavaDB / Derbyの整数列にマップするためです。ただし、これは列がJPQLでアクセスされる場合にのみ発生します。CriteriaAPIを使用した場合も同じ結果になります。

Hibernateはorg.hibernate.dialect.DerbyDialectに設定されており、ドライバーはorg.apache.derby.jdbc.EmbeddedDriverに設定されています。

他のバージョンのJDBCドライバーでも同じ結果になります。

おそらく回避策は、列を「Y」と「N」を含む単一の文字にマップすることです。しかし、私はむしろそれをきちんとやりたいです。

誰かもこの問題に遭遇しましたか?

4

2 に答える 2

1

クエリパラメータとしてtrueを渡す

SELECT b.id FROM Bar b WHERE b.latest = :latest

確かに動作します。

于 2012-06-11T11:06:29.963 に答える
0

おそらく、HibernateDerbyDialectがDerbyのバージョンと正確に一致していません。DerbyによるBOOLEANデータ型の処理は、いくつかのリリースに戻って変更されました。クライアントがBOOLEANデータ型と一致する正しいJDBCAPIを使用していることを確認する必要があると思います。Derbyの古いリリースでは、BOOLEANではなくINTEGERのみがサポートされていました。

あなたの質問でより多くの詳細を提供することは非常に価値があります。関連するすべてのソフトウェアパッケージの正確なバージョンに注意し、発生するエラーメッセージの完全なスタックトレースを含め、エラーが発生するプログラム内の正確な場所のソースコードの抜粋を投稿します。

于 2012-04-04T14:20:02.460 に答える