私はHibernateで本当に新しいです。が欲しい List<User>
hibernate基準を使用しますが、ユーザーIDと名前が入力されたフィールドのみ。それは可能ですか?以下に示すクエリのようなもの:
SELECT user.id, user.name FROM user
よろしく。
これがまさに予測の目的です。次に例を示します。
Criteria cr = session.createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Projections.property("id"), "id")
.add(Projections.property("Name"), "Name"))
.setResultTransformer(Transformers.aliasToBean(User.class));
List<User> list = cr.list();
実際、「遅延プロパティフェッチ」のドキュメントを見ると、具体的に次のように述べられています。
「少なくとも読み取り専用トランザクションの場合、不要な列の読み取りを回避する別の(より良い?)方法は、HQLまたは基準クエリの射影機能を使用することです。これにより、ビルド時のバイトコード処理の必要がなくなり、確かに推奨されるソリューションです。」
ちなみに、あなたも興味があるかもしれない関連する質問があります: Hibernate Query By Example and Projections
私はこれに答えるのが本当に遅いですが、以下のようにカスタム結果トランスフォーマーをQueryオブジェクトに追加できます。
Query query = session
.getNamedQuery(
"someNamedQueryWhichISHQL")
.setString("cod", "10")
.setResultTransformer(new ResultTransformer() {
public Object transformTuple(Object[] row, String[] arg1) {
User usr = new User(row[0],row[1]);
return usr
}
public List transformList(List arg0) {
return arg0;
}
});
return query.list();
通常、オブジェクトのプロパティを部分的にロードする必要はありません。しかし、もし必要なら、これを見てください:
プレーンレポートのような動作の場合、エンティティクエリを使用できます。
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);
http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/querysql.html#d0e176