34

JavaDocによると:

SQLQuery org.hibernate.SQLQuery.addScalar(String columnAlias, Type type)

Declare a scalar query result

executeScalarはC#に何があるか知っていますが、このスカラーとC#スカラーは完全に異なっているようです。

4

4 に答える 4

36

これは、エンティティではなく、個々の名前付き列のオブジェクトを返すクエリの結果が必要であることを宣言しています。例えば

createSQLQuery("SELECT COUNT(*) AS c FROM Users").addScalar("c").uniqueResult()

単一の を返しLongます。複数のスカラーを指定すると、結果は の配列として返されObjectます。executeScalar名前付き列で機能し、複合結果を返すことができることを除いて、 に似ています。

于 2013-03-13T13:40:44.403 に答える
18

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

session.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

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

すべてまたは一部のスカラーの型情報を省略することができます。

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

これは基本的に以前と同じクエリですが、ID のタイプが明示的に指定されている場合、ResultSetMetaData を使用して NAME と BIRTHDATE のタイプを決定します。

thisからコピーされました。

于 2014-03-22T03:31:15.763 に答える
4

addScalarSQL クエリで与えられたキーに対する returnType の情報です。

例:

Query a = new SqlQuery("Select username as un from users where ...");
a.addScalar("un", String);

結果を照会する場合、指定した場合、結果は文字列またはその他の型になります。

于 2013-03-13T15:14:11.040 に答える