2017-11-16 20 views
0

はそうHibernate 5では、Criteriaの制限と投影に相当するCriteriaQueryは何ですか? Hibernateは5の前に

Criteria criteria = session.createCriteria(T.class) 
    .add(Restrictions.or(Restrictions.eq(property, constraintValue) 
    .set(Projection(Projections.projectionList() 
    .add(Projections.property(selectValue))); 

のように、あなたは制約として機能する条件に制限を加えることができ、かつ突起がAS SELECT文を行動し、Criteriaクラスを非推奨。しかし、あなたは今CriteriaQueryなどを使用する必要がありますので、そう、

CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder(); 
CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(T.class); 
Root<T> root = criteriaQuery.from(T.class); 
criteriaQuery.select(root); 

Query<T> query = session.createQuery(criteriaQuery); 

は、しかし、私は、ドキュメントを検索することにより、ネーミングの類似性に、基準に関するドキュメントに巻き取る傾向がある主な理由は、SQL文で必要とされる特定の物事を追加する方法を見つけ出すことができませんでした。

したがって、以下のような単純なクエリをCriteriaQueryを使用して再作成するにはどうすればよいですか?

SELECT selectValue 
FROM tables.T 
WHERE property = constraintValue 

答えて

0

Source.

複数の例がありますが、我々は再作成しようとしていた単純なSELECT文がそうのように行うことができることが判明した:これは一般的な答えであることを

CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder(); 
CriteriaQuery<SELECTVALUETYPE> criteriaQuery = criteriaBuilder.createQuery(SELECTVALUETYPE.class); 
Root<PARENTCLASS> root = criteriaQuery.from(PARENTCLASS.class); 
criteriaQuery.select(root); 
criteriaQuery.where(criteriaBuilder.equal(root.get(property), constraintValue)); 

Query<SELECTVALUETYPE> query = session.createQuery(criteriaQuery); 

は注意、実際には実行されません。その理由は、SELECTVALUETYPEをselectValueのデータ型に置き換える必要があるからです。
例えば、CriteriaQueryになるかもしれません:

  • 文字列selectValue - > CriteriaQuery
  • T selectValue - >文のCriteriaQuery

したがって、実施例

Select name 
From Users 
Where ID = 1 

はでした次のブロックで表現されます。

int ID = 1; 
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder(); 
CriteriaQuery<String> criteriaQuery = criteriaBuilder.createQuery(String.class); 
Root<User> root = criteriaQuery.from(User.class); 
criteriaQuery.select(root.get("name"); 
criteriaQuery.where(criteriaBuilder.equal(root.get("ID"), ID)); 

Query<String> query = session.createQuery(criteriaQuery); 

List<String>results = query.getResultList(); 
for(String name : results){ 
    System.out.println("Name: " + name); 
} 
関連する問題