JavaDocによると:
SQLQuery org.hibernate.SQLQuery.addScalar(String columnAlias, Type type)
Declare a scalar query result
C#でexecuteScalar
が何であるかは知っていますが、このスカラーと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")
これは以前と基本的に同じクエリですが、現在ではResultSetMetaDataを使用して、NAMEとBIRTHDATEのタイプを判別しています。IDのタイプは明示的に指定されています。
this からコピー。
addScalar
は、SQLクエリの特定のキーのreturnTypeの情報です。
例:
Query a = new SqlQuery("Select username as un from users where ...");
a.addScalar("un", String);
結果を照会する場合、指定した場合、結果はストリングまたは他のタイプになります。
これは、Beanに複数のdiffタイプのフィールドがあり、これらのフィールドをmysqlから同じタイプで取得する場合に使用されます。例えば。
public class Example { Long id; String name; }
次のようにスカラーを追加することができます
session.createSQLQuery("SELECT * FROM tableName")
.addScalar("id", Hibernate.LONG)
.addScalar("name", Hibernate.STRING);