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.Types
Informix 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[]
でしょうか?