2010-06-30 14 views
1

grails findAll 태그에서 "SELECT id, name, part, description FROM user"를 사용하는 방법. grails findAll tag

내가 대신
User.findAll("FROM user") 

그러나 오류를 표시

를 사용
User.findAll("SELECT id, name, part, description FROM user") 

을 시도했다. 는 사람이 나에게

덕분에, 가 스리랑카를 ..

답변

3

finadAll() 도메인 개체의 컬렉션을 반환, 그래서 이해가되지 않습니다 선택 열을 열거 태그를 제안 할 수 있습니다; 이해하는 쿼리는 실제 SQL이 아니며 기본적으로 WHERE 절로만 구성됩니다. 당신이 결과 집합을 제한 할 것 같지 않기 때문에, 이것은 당신이 필요로하는 모든 아마도 :

User.findAll() 

그것은 모든 User 개체의 컬렉션을 반환합니다. 당신이 구문 IST 더 간단

User.findAll("from User as u where u.id=?", [userId]) 

또는를 제약해야하는 경우 a dynamic finder를 사용할 수 있습니다

User.findAllById(userId); 
+0

하지만 "SELECT id, name, part, description FROM user"라는 태그가 있습니다. 고마워요 – Srinath

+0

@ 스리 네스 : 아니, 그런 식으로하지 않습니다. 도메인 객체와 작동하는 프레임 워크에는 의미가 없습니다. 사용자 개체를 가져오고 해당 개체의 속성에 액세스하기 위해 나열된 메서드를 사용하면 무엇이 잘못됩니까? PHP로만 작업 한 것처럼 보이고 Grails에 PHP 코드를 작성하려고합니다. 그것은 당신을 멀리하지 않을 것입니다. –

+0

이전에 저는 Ruby on Rails에서 일했습니다. 나는 이미 위에서 언급 한 findAll 태그를 사용했습니다. 나는 Grails에도 그런 태그가 있는지 알고 싶다. 귀하의 제안에 감사드립니다 : ( – Srinath

1

를 신고 스타일의 쿼리를 다음과 같이 실행하려는 경우,하는 executeQuery 메소드를 사용 :

def rows = User.executeQuery("SELECT id, name, part, description FROM User") 

반환 값은 객체 배열의 각 요소가 열의 유형입니다. 즉, 첫 번째 요소는 long, 두 번째 문자열 등이됩니다.

당신이 Hibernate 엔티티를 언급하고 있기 때문에 User는 대문자로 써야한다는 것을 기억하십시오. 이것은 SQL 질의가 아니라 HQL입니다.

0

특정 필드 만 쿼리하려는 경우 투영과 함께 조건 쿼리를 사용할 수 있습니다.

예 :이 쿼리는 도메인 대신 객체의 각각의 일치하는 행하기위한 문자열의 배열 (또는 어떤 데이터베이스 열 타입에 매핑되는 것)을 반환

def userProperties = User.withCriteria { 
    projections { 
     property('id') 
     property('name') 
     property('part') 
     property('description') 
    } 
} 

.

0

객체의 ArrayList 만 반환합니다. 객체의 값에 액세스하기 만하면됩니다. 예를 들어 :

class Code { 

    String user_code 
    boolean flg_active 

    static constraints = { 

     user_code nullable:true, blank:true, size:0..Text.MID 
     flg_active nullable:true, blank:true, default:1 
    } 
} 

는 희망이 당신 도움 :

def result = Code.findAll("from Code as c where c.user_code=?",[pass]) 
result[0].user_code 

내 코드 클래스는 다음과 같이 인 경우!