JPA は、ネイティブ SQL クエリを実行する機能を提供します。
final Query q = entityManager.createNativeQuery("SELECT hork FROM foobar");
assert q != null;
final List results = q.getResultList();
上記のクエリでは、どのようなオブジェクトが my に存在するListでしょうか?
簡単に見えますが、次のとおりです。
この場合、InformixTEXT列があります。InformixTEXT型はCLOB. _
java.sql.TypesInformix JDBC ドライバーは、この列がマップされているフィールド値が であることを報告します (これが true であるかどうかは変更できません) java.sql.Types#LONGVARCHAR。わかった。
次のような通常の古い JDBC クエリを実行する場合:
final ResultSet rs = someStatement.executeQuery("SELECT hork FROM foobar");
assert rs != null;
while (rs.next()) {
final Object result = rs.getObject(1);
// see if you can guess what result.getClass() is
}
...あなたはbyte[]ではなくで作業していStringます。
ここで、ビッグ 2 の JPA プロバイダー (Hibernate、EclipseLink) を使用して上記のネイティブ クエリを実行すると、結果リストにさまざまなオブジェクトが表示されます。
Hibernate はString、StringおそらくResultSet#getString(int)( の代わりにResultSet#getObject(int)) または結果のbyte[].
TopLinkはbyte[]、ASCIIキャラクタ・セットでデコードおよび解釈されると、実際には列の内容である の16進表現を戻します。
関連する質問が 2 つあります。
JPA にスカラー ネイティブ SQL クエリの型を指示するにはどうすればよいですか?
EclipseLink が列の内容を表す を返さない場合
String、どうして単に を返さないのbyte[]でしょうか?