JavaDocによると:
SQLQuery org.hibernate.SQLQuery.addScalar(String columnAlias, Type type)
Declare a scalar query result
私executeScalar
はC#に何があるか知っていますが、このスカラーとC#スカラーは完全に異なっているようです。
これは、エンティティではなく、個々の名前付き列のオブジェクトを返すクエリの結果が必要であることを宣言しています。例えば
createSQLQuery("SELECT COUNT(*) AS c FROM Users").addScalar("c").uniqueResult()
単一の を返しLong
ます。複数のスカラーを指定すると、結果は の配列として返されObject
ます。executeScalar
名前付き列で機能し、複合結果を返すことができることを除いて、 に似ています。
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からコピーされました。
addScalar
SQL クエリで与えられたキーに対する returnType の情報です。
例:
Query a = new SqlQuery("Select username as un from users where ...");
a.addScalar("un", String);
結果を照会する場合、指定した場合、結果は文字列またはその他の型になります。