2017-01-19 6 views
1

あるEnityManagerのcreateNativeQuery resultClassをを返すことができますDojoClass
3.どちらのクラスも同じ変数を持ちます。
は、私は以下のスクリプトを持つことができ道場クラス

質問:
私は次のメソッドを呼び出したときに返されるもの:
A- entityManager.createNativeQuery("SELECT * FROM EntityTable",EntityClass.class);

B- entityManager.createNativeQuery("SELECT * FROM EntityTable",Dojo.class);

は、彼らが正しいですか?

+0

"DojoClass"が何であるかを知っている人。おそらく、クラス自体を示す例を定義するときに... –

+0

@NeilStockton:DojoClassは、名前がDojoClass.javaのプレーンなJavaファイルであることを意味します。最も重要なのは、クラスがEntityClassと同じ変数を持つことです。 – user3205761

答えて

1

これは非常に珍しい使用例です。私は理論的にしか推測していません。

私はあなたが持っているのと同じように構成しました。特に、両方のエンティティが全く同じ基本フィールドを持っています(これは結果をクラスにマッピングする際に検討されるものです)。

私は、フードの実装としてJPA 2.1とHibernate 5.xを使用しています。

両方のクエリが正しく実行され、が実行され、それぞれのクラスの対応するフィールドに期待どおりの結果が割り当てられます。

は私が実装に少し深く行って、基本的に舞台裏で何が起こっているかである。createNativeQueryための標準的な動作である第一段階として、タイプList<Object[]>のリストの

  • 作成(文字列)メソッドを呼び出すことができます。
  • リフレクションを使用してクラスのフィールドを設定します。 2番目のパラメータとして指定された

    • クラス:だから、本当に終わりのための

    そして、いくつかのヒント..我々は結果を引いている。..列名と型が一致している必要がありますどのテーブルから問題ではありません。

  • 私が特定の列のみを照会しようとすると、クエリに欠けている欠落している列でエラーが発生していました。だから私はいつもすべてを選択しなければならないと思う。

これは物事を明確にすることを望む。

+0

クラスのフィールドがリフレクションによって設定されている場合は、特定の列を選択した場合にうまく動作すると思います。私が選択しないコンマは返されません。私はそうだと思う:) – user3205761

+0

それは私が考えたものだが、私はすべてのマップされた列を選択していない場合SQLGrammarExceptionを取得し続けた..多分その実装/バージョン依存 –

関連する問題