cz_Nesh。 私の最初の答えについて申し訳ありません。 私はHibernate APIを読んで、Hibernateのソースコードを読んでいます。 このコード
session.createCriteria(EmpUserImpl.class).list();
を使用している場合、それはリストEmpUserImplを返します。 このコード
criteria.setProjection(Projections.projectionList()
.add(Projections.groupProperty("company").as("company"))
.add(Projections.property("name").as("name"))
.add(Projections.property("company").as("company")));
List list = criteria.list();
を使用している場合、それはEmpUserImpl理由をリストしていない、リストを返しますか? 基準の親クラスCriteriaSpecificationを見れば分かります。
public interface CriteriaSpecification {
/**
* The alias that refers to the "root" entity of the criteria query.
*/
public static final String ROOT_ALIAS = "this";
/**
* Each row of results is a <tt>Map</tt> from alias to entity instance
*/
public static final ResultTransformer ALIAS_TO_ENTITY_MAP = AliasToEntityMapResultTransformer.INSTANCE;
/**
* Each row of results is an instance of the root entity
*/
public static final ResultTransformer ROOT_ENTITY = RootEntityResultTransformer.INSTANCE;
/**
* Each row of results is a distinct instance of the root entity
*/
public static final ResultTransformer DISTINCT_ROOT_ENTITY = DistinctRootEntityResultTransformer.INSTANCE;
/**
* This result transformer is selected implicitly by calling <tt>setProjection()</tt>
*/
public static final ResultTransformer PROJECTION = PassThroughResultTransformer.INSTANCE;
/**
* Specifies joining to an entity based on an inner join.
*
* @deprecated use {@link org.hibernate.sql.JoinType#INNER_JOIN}
*/
@Deprecated
public static final int INNER_JOIN = JoinType.INNER_JOIN.getJoinTypeValue();
/**
* Specifies joining to an entity based on a full join.
*
* @deprecated use {@link org.hibernate.sql.JoinType#FULL_JOIN}
*/
@Deprecated
public static final int FULL_JOIN = JoinType.FULL_JOIN.getJoinTypeValue();
/**
* Specifies joining to an entity based on a left outer join.
*
* @deprecated use {@link org.hibernate.sql.JoinType#LEFT_OUTER_JOIN}
*/
@Deprecated
public static final int LEFT_JOIN = JoinType.LEFT_OUTER_JOIN.getJoinTypeValue();
}
あなたはのpublic static final ResultTransformer投影を見ることができますか?結果トランスフォーマが、 "ROOT_ENTITY"から "PROJECTION"に変更されているため、結果セットのトランスフォーマがsetProjection()を呼び出すことによって暗黙的に選択されていると言います。 はcriteria.setProjectionを使用すると意味があり、結果はEmpUserImplを表示しません。 select name、oid ..のように)。 List EmpUserImplを返すには、Projections.property( "name")。as( "name")を設定する必要があります。 これは私のコードです。
Criteria criteria = session.createCriteria(EmpUserImpl.class);
criteria.setProjection(Projections.projectionList()
.add(Projections.groupProperty("company").as("company"))
.add(Projections.property("name").as("name"))
.add(Projections.property("company").as("company")));
criteria.setResultTransformer(Transformers.aliasToBean(EmpUserImpl.class));
List<EmpUserImpl> list = criteria.list();
for (EmpUserImpl empUserImpl : list) {
System.out.println(empUserImpl.getName());
}
でも動作します。それがあなたを助けることを願っています。
こんにちはZiul、あなたの返信のthx。あなたのアドバイスでは、オブジェクトのリストを取得しますが、リストからオブジェクトへのキャストを試みると、Javaは例外をスローします。 –
Ehm、私は変圧器で線を削除するO: - )...この行を追加した後、私はまだnullオブジェクトのリストを取得します。 –
あなたの投稿を編集していただきありがとうございます。私は1つのプロパティだけを取得するのではなく、オブジェクト全体を取得します。私は 'SELECT b FROM Book b GROUP BY volumeCode'を呼んだ後に同じ結果を得る必要があります。結果はListでなければなりません。 –