2017-11-16 10 views
0

은 제약 역할을하는 기준에 제한을 추가 할 수 있습니다, 당신은 지금처럼 CriteriaQuery를 사용할 필요가 있기 때문에 예측, 그래서최대 절전 모드 5에서, CriteriaQuery는 Criteria의 제한 및 투영과 같은 기능을합니까? 최대 절전 모드 5 전

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

처럼, 같은 선택 문을 행동 그러나하려면 기준 클래스를 사용 중지 그래서,

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); 
}