6

私は休止状態を使用しています。ネイティブSQLクエリを作成しましたが、次のようにいずれかの列のデータ型を指定したいと思います。

sqlQuery.addScalar("NAME", STRING);

私は5IDつの列をクエリしており、そのうちの1つです。ただし、を使用するaddScalarと、すべての列が返されるわけではなく、。のみが返されNAMEます。列タイプを指定している理由はNAME列ですが、タイプCHAR(10)が必要ですString。データ型を指定してすべての列を取得するにはどうすればよいですか?

4

2 に答える 2

7

ResultSetMetadataを使用するオーバーヘッドを回避するため、または単に返される内容をより明確にするために、addScalar()を使用できます。

sess.createSQLQuery("SELECT * FROM CATS")
 .addScalar("ID", Hibernate.LONG)
 .addScalar("NAME", Hibernate.STRING)
 .addScalar("BIRTHDATE", Hibernate.DATE)

このクエリは次を指定しました:

the SQL query string

the columns and types to return

これによりObject配列が返されますが、ResultSetMetadataは使用されませんが、代わりに、基になる結果セットからID、NAME、およびBIRTHDATE列がそれぞれLong、String、およびShortとして明示的に取得されます。これは、クエリが*を使用していて、リストされている3つの列より多くを返す可能性がある場合でも、これらの3つの列のみが返されることも意味します。

参照:http ://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html#d0e13646

したがって、あなたの場合addScalar()、列名とデータ型を使用して、さらに4つのメソッドを追加します。

于 2012-10-12T13:46:33.443 に答える
0

これは、動作するはずのとおりに動作しています。クエリから返されたすべての値を使用ResultSetMetaDataして返すか、提供された型入力を使用して、型で提供された列を返すことができます。

問題がない場合は、残りの4列のタイプも追加します。

     sqlQuery.addScalar("NAME", STRING).
     .addScalar("ID", Hibernate.LONG)
     .addScalar("COLUMN3", STRING)
     .addScalar("COLUMN4", STRING)
     .addScalar("COLUMN5", STRING);

実際の列名とそのデータ型に従って、列名とデータ型を更新します。

于 2012-10-12T13:51:20.190 に答える