2012-02-02 3 views
1

こんにちは。 基本的に、このコードは、見つかった行の数を返す関数に追加されます。 の子行の数は10より大きくなります。値10は動的になります。Hibernate Criteria親子関係の行カウント投影法をソートする方法

私はすでにこの問題に悩まされています。

ビューを使用したり、データベーススキーマを変更したりできないように、データベース自体を制御することはできません。また、これは問題の簡略化されたバージョンです。クライアントとマップフィールドの他のプロパティは省略され、投影と条件の作成はジェネリックヘルパーメソッドにリファクタリングされます。

public class client 
{ 
private int id; 
private string code; 
@OneToMany(fetch=FetchType.Lazy) 
@JoinColumn(name="code", nullable=true) 
private List <MapFields> mapFields; 
} 

public class MapFields 
{ 
private int id; 
private string code; 
} 

ハイバネート基準を使用してこのSQLクエリを実行するにはどうすればよいですか。

SELECT COUNT(*) 
FROM 
(
    SELECT MapFields.code 
    FROM Client LEFT JOIN MAPFields on Client.code 
    GROUP BY MapFields.code 
    HAVING COUNT(MapField.code) > 10 
) AS A 

私は以下を試したが、役に立たなかった。私はプロパティが解決できないことを私に教えてくれる例外に遭遇し続けます。

org.hibernate.QueryExceptionは:プロパティを解決できませんでした:のnumberOfMapFieldsを:...クライアント

Criteria criteria = getCurrentSession().createCriteria(Client.class) 

criteria.createAlias("mapFields", "mapFields", CriteriaSpecification.Left_Join) 

ProjectionList pl = Projections.projectionList(); 

pl.add(Projections.count("mapFields.code", "numberOfMapFields")); 

pl.add(Projections.rowCount()); 

criteria.setProjection(projectionList); 

criteria.add(Restriction.ge("numberOfMapFields", "10")) 

criteria.list(); 

誰もが休止状態の基準を使用してこれを行う方法上のコードスニペットを提供することができますしてください、あなたが必要な場合は、詳細な情報は私に教えてください。私はより多くの情報を提供しようとします。

+0

誰もが考えている:( –

+0

from句で選択したものは基準ではサポートされていません。 – Firo

答えて

0

from句では、条件ではサポートされません。 hqlまたはsqlを使用する - Firo

Doh!情報をお寄せいただきありがとうございます。

関連する問題