4

JPA は、ネイティブ SQL クエリを実行する機能を提供します。

final Query q = entityManager.createNativeQuery("SELECT hork FROM foobar");
assert q != null;
final List results = q.getResultList();

上記のクエリでは、どのようなオブジェクトが my に存在するListでしょうか?

簡単に見えますが、次のとおりです。

この場合、InformixTEXT列があります。InformixTEXTCLOB. _

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 はStringStringおそらくResultSet#getString(int)( の代わりにResultSet#getObject(int)) または結果のbyte[].

TopLinkはbyte[]、ASCIIキャラクタ・セットでデコードおよび解釈されると、実際には列の内容である の16進表現を戻します。

関連する質問が 2 つあります。

  1. JPA にスカラー ネイティブ SQL クエリの型を指示するにはどうすればよいですか?

  2. EclipseLink が列の内容を表す を返さない場合String、どうして単に を返さないのbyte[]でしょうか?

4

1 に答える 1