2010-12-04 8 views
2

JPA:JQLとSQLの違い

このコードは、Java Persistence Query Languageを使用しているために機能します。

Customer c = (Customer) manager.createNativeQuery("SELECT * FROM Customer LIMIT 1").getSingleResult();

同様のコードとCustomerへのネイティブクエリキャストを使用すると、ClassCastExceptionが生成されます。

これは疑問につながります: SQLを使用してネイティブクエリから結果としてオブジェクトを作成することは可能ですか?

答えて

4

私はあなたが、(2つのparamsと1; Imはリンクに問題がある)createNativeQueryためdocumentationを見てみることができると思い

だけcreateNativeQuery呼び出しにしたいクラスを渡す....

1

私は明らかにその1を見ていません。 JQLを学ぶよりもはるかに便利な方法です。

しかし、潜在的な落とし穴かもしれない別の問題があります:あなたは大文字でフィールド名を入力する必要がありますいくつかのケースでは。

私は確認することはできませんが、 ネイティブクエリを使用する場合には非常に一般的である場合の感度の問題 に実行して である可能性があります。 JP35のデフォルトのフィールド の名前は大文字で、 の場合、 のフィールド名を小文字として返すデータベースを使用すると、Javaの 文字列比較で大文字と小文字が区別されるため、フィールドが見つからないことがあります。この は、それが 「ID」の値を探したときにResultSetが はnullを返すことになります。あなたの迅速な答えをOracle Forums - primary key detected to be null, but it isn't

おかげでより引用

+0

これは別の質問としてお尋ねください。 – hvgotcodes

+0

これは問題ではなく、ちょっとした追加情報です。問題が解決されるとすぐに次の問題に遭遇しました...とにかく – phineas