2013-06-28 4 views
1

컨설턴트로부터 응용 프로그램을 상속 받았으며 Providier 및 Identifier의 두 매개 변수를 통해 데이터베이스에서 사용자를 찾는 코드를 따르려고합니다.도메인 클래스의 유효성 검사 방법

내가 수집 한 것에서 컨트롤러 메서드가 호출되어 서비스 메서드가 호출되고 해당 서비스 메서드는 이라는 도메인 클래스의 유효성 검사기로 보이는 것을 호출합니다.

나는 막 다른 골목에 다다 랐다. Login.findByProviderAndIdentifier()의 실제 코드는 어디에서 찾을 수 있습니까?

class Login { 
    String id 
    String identifier 
    String password 
    boolean generated = false 
    Provider provider 
    Date lastUpdated 
    Date dateCreated 
    Boolean isActive = true 

    static constraints = { 
     identifier(blank:false, 
        validator: {val, obj, errs -> 
         if (val && obj.provider && !obj.generated) { 
          def dbLogin = Login.findByProviderAndIdentifier(obj.provider, val) 
          if (dbLogin && dbLogin.id != obj.id) { 
           errs.rejectValue("identifier", "unique", [obj.provider.name, obj.identifier] as Object[], "Identifier ${obj.identifier} already exists for provider ${obj.provider.name}") 
          } 
         } 
        } 
       } 

답변

2

이 방법은 동적 찾기입니다. 그것에 대한 "실제 코드"는 GORM에 의해 즉석에서 생성됩니다. the documentation 방법은이 설명

GORM 동적 파인더의 개념을 지원한다. 동적 파인더는 정적 메서드 호출과 같이 과 비슷하지만 메서드 자체는 이 코드 수준에서 실제로 어떤 형식으로도 존재하지 않습니다.

대신 특정 클래스의 속성에 따라 런타임에서 코드 합성을 사용하여 자동으로 생성됩니다.

그래서이 경우 GORM은 공급자 ID와 유효성이 확인되는 식별자 값을 취하는 where 절을 사용하여 select 문을 생성합니다.

생성 된 쿼리를 보려면 Hibernate SQL 로깅을 켜거나 log4jdbc을 설정할 수 있습니다.

+0

제공된 링크를 읽으십시오. 매우 계몽. 허용되는대로 즉시 받아 들일 것입니다. – EdgeCase

관련 문제