2017-04-05 8 views
1

이것은 내 도메인을위한 코드입니다.Grails 2.4.4 데이터베이스 테이블에서 테이블을 조인하기위한 executeQuery()

class Btr { 

    Date dateBreak 
    int timeBreak 
    String typeBreak 
    User usuario 

    static constraints = { 
    } 

    static mapping = { 

     } 
} 


class User { 

    String name 
    String user 
    String password 
    String confirmPassword 
    String state 
    String extent 
    String movileNumber 
    String email 
    String address 
    Rol rol 



    static constraints = { 

    } 

    static mapping = { 

    } 
} 

이것은 내 컨트롤러 용 코드입니다.

def df = new SimpleDateFormat("yyyy-MM-dd HH:mm") 
def startDate = params.startDate 
def stopDate = params.stopDate 

resultado = Btr .executeQuery("select dateBreak, timeBreak, typeBreak, 
user, usuario.rol from Btr inner join User on user = usuario.rol where 
dateBreak between :startDate" and :stopDate", [startDate: 
df.parse(startDate), stopDate: df.parse(stopDate)]) 


render (view: "data", model: [result: resultado]) 

이것은 내 견해입니다.

<g:each in="${result}" var="results" status="i"> 
    <tr><td>{results.dateBreak}</td><td>{results.timeBreak}</td><td> 
    {results.typeBreak} </td><td>${results.usuario.rol}</td></tr> 
    </g:each> 

그런 다음 양식을 제출할 때이 오류가 발생합니다. GSP를, 내가 인쇄하고 데이터 ,

Exception evaluating property 'dateBreak' for java.util.Arrays$ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: dateBreak for class: java.sql.Timestamp 

은 누군가가 그것을 할 배울 좋은 것도하는 executeQuery와 Grails의에서 테이블을 조인하는 방법을

답변

0
resultado = Btr .executeQuery("select dateBreak, timeBreak, typeBreak, 
user, usuario.rol from Btr inner join User on user = usuario.rol where 
dateBreak between :startDate" and :stopDate", [startDate: 
df.parse(startDate), stopDate: df.parse(stopDate)]) 
withCriteria을 말씀 해주십시오 수

resultado = Btr .executeQuery("""select new map (btr.dateBreak as dateBreak, btr.timeBreak as timeBreak, btr.typeBreak as typeBreak, 
u as user, user.usuario.rol as rol) from Btr btr join btr.user u where 
btr.dateBreak between :startDate and :stopDate""", [startDate: 
df.parse(startDate), stopDate: df.parse(stopDate)]) 

것은 당신이해야하는 약간의 변형 및

가입을 실제 도메인 객체를 사용하여 원시 SQL 및하지 HQL이다이어야한다

을 사용하면 하나 개의 관계에 하나가 널 (NULL) 일 수있는 경우가 null

는 또한 왼쪽 사용에 가입 한 관계로 전형적인 하나에 가입 할 수있다 hasMany의 조인 왼쪽 당신이로 실제 쿼리를 놓치면서

넘어 그렇게 원시 SQL 쿼리

def sql=new Sql(dataSource) 
return sql.rows(query,whereParams)