web-dev-qa-db-ja.com

Hibernateプロジェクションを使用する場合

Hibernateのprojectionsおよびcriteriaについて少し混乱しています。プロジェクションを使用するタイミングと基準を使用するタイミング

私を助けてください。ありがとう!

40
reddy

相互に排他的ではなく、両方を同時に使用できます。投影は一般に、いくつかの基準のコンテキストで使用されます。

簡単に言うと、Hibernate Projectionsを使用して、Criteriaでクエリを実行しているエンティティまたはエンティティのグループの属性のサブセットのみをクエリします。プロジェクションを使用してdistinct句を指定し、maxsumなどの関数を集約することもできます。これは、取得するデータwhichを参照するようなものです。 SQLクエリのselect句の変更と同様です。

Hibernate Criteriaは、選択するためにデータが満たさなければならない条件を定義するために使用されます。 howが参照しているデータを参照しているようなものです。 SQLクエリのfromおよびwhere句の変更と同様です。

このhowおよびwhichは厳密には真ではなく、単なるOPを支援するためのオリエンテーション。たとえば、createCriteria(String associationPath)で取得するデータを変更することができますwhich

この記事をご覧になることをお勧めします Hibernate:Criteria Queries in Depth

82
Xavi López

射影は、集計操作を実行し、単一列のクエリを取得するために使用されます。制限付きで[〜#〜] row [〜#〜]にアクセスできますが、 PROJECTIONSを使用すると、全体[〜#〜] column [〜#〜]にアクセスできます

EX-

public static void main(String[] args) {
    SessionFactory factory = new Configuration().configure().addAnnotatedClass(Student.class).buildSessionFactory();
    Session session = factory.getCurrentSession();
    try {
        session.beginTransaction();
        Criteria c = session.createCriteria(Student.class);
        Projection p = Projections.property("lastName");
        List<String> students = c.setProjection(p).list();
        for(String s:students)
            System.out.println(s);
        session.getTransaction().commit();
        session.close();
    } finally {
        factory.close();
    }
}

上記の例では、射影呼び出しを使用して、射影プロパティ「名前」を基準に追加しました。 winchester winchester winchester winchesterを返します。これは、テーブルのlastName[〜#〜] column [〜#〜]です。

出力=

休止状態:学生からthis_.last_nameをy0_として選択this_ winchester winchester winchester winchester

注-1つ以上の投影を追加する場合、前の投影が上書きされる場合、1つの投影のみ追加できます。複数のプロジェクションを追加する場合は、ProjectionListクラスを追加します

オリジナル表-

enter image description here

2
Rishabh Jain