28

私はHibernateに本当に慣れていません。休止状態の基準を使用したいのですList<User>が、ユーザーIDと名前のフィールドのみが入力されています。それは可能ですか?以下に示すクエリのようなもの:

SELECT user.id, user.name FROM user

よろしく。

4

3 に答える 3

56

これはまさに予測の目的です。以下に例を示します。

  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 または Criteria クエリのプロジェクション機能を使用することです。これにより、ビルド時のバイトコード処理が不要になり、確かに推奨されるソリューションです。」


ところで、あなたも興味があるかもしれない関連する質問があります: Hibernate Query By Example and Projections

于 2009-06-04T21:43:56.657 に答える
3

これに答えるのが本当に遅くなりましたが、以下のようにカスタム結果トランスフォーマーを 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();
于 2014-02-10T19:58:27.160 に答える
1

通常、オブジェクトのプロパティを部分的にロードすることは望ましくありません。ただし、必要な場合は、これを参照してください。

http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/performance.html#performance-fetching-lazyproperties

単純なレポートのような動作については、エンティティ クエリを使用できます。

sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);

http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/querysql.html#d0e17633

于 2009-06-04T14:14:11.653 に答える