Hibernate のプロジェクションと基準について少し混乱しています。いつ予測を使用し、いつ基準を使用するか?
4 に答える
これらは相互に排他的ではなく、両方を同時に使用できます。射影は通常、いくつかの基準のコンテキストで使用されます。
簡単に言うと、Hibernate Projectionsは、Criteriaでクエリしているエンティティまたはエンティティのグループの属性のサブセットのみをクエリするために使用されます。Projectionsを使用して、句を指定したり、などdistinct
の関数を集計したりすることもできます。これは、フェッチしているデータを参照するようなものです。SQLクエリの句を変更するようなものです。max
sum
select
Hibernate Criteriaは、データが選択されるために満たさなければならない条件を定義するために使用されます。これは、フェッチしているデータがどのようになっているのかを参照するようなものです。SQLクエリのfrom
and句を変更するようなものです。where
これは厳密には真実ではないことに注意してください。これは、OPを支援することを目的とした単なるオリエンテーションです。たとえば、フェッチするデータを変更できます。createCriteria(String associationPath)
Projection は「org.hibernate.criterion」パッケージで提供される Interface、Projections は同パッケージで提供されるクラス、実際には Projection はインターフェース、Projections はクラスであり、Projection オブジェクトを生成するためのファクトリです。
Projections クラスにはすべての静的メソッドがあり、このクラスの各メソッドは Projection インターフェイス オブジェクトを返します。
Projection オブジェクトを Criteria に追加する場合は、setProjection() メソッドを呼び出す必要があります。
投影オブジェクトを基準に追加する際、一度に 1 つのオブジェクトを追加できることに注意してください。これは、2 番目の投影オブジェクトを追加すると、この 2 番目の投影オブジェクトが最初の投影オブジェクトをオーバーライドすることを意味します (最初の投影オブジェクトは機能しません)。
基準を使用して、データベースから部分オブジェクトをロードする場合は、データベースからロードされるプロパティの射影オブジェクトを作成する必要があります
Criteria crit = session.createCriteria(Products.class);
crit.setProjection(Projections.proparty("proName"));
List l=crit.list();
Iterator it=l.iterator();
while(it.hasNext())
{
String s = (String)it.next();
// ---- print -----
}
複数のプロジェクションを基準に追加すると、最後に追加されたプロジェクションが実行されると見なされます…</p>
Criteria crit = session.createCriteria(Products.class);
Projection p1 = Projection.property("proName");
Projection p2 = Projection.property("price");
crit.setProjection(p1):
crit.setProjection(p2):
List l=crit.list();