gorm - Grails 2.4.4 executeQuery() to join tables from a table of a database -


this code domains.

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 = {      } } 

this code controller.

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 btr inner join user on user = usuario.rol  datebreak between :startdate" , :stopdate", [startdate:  df.parse(startdate), stopdate: df.parse(stopdate)])   render (view: "data", model: [result: resultado]) 

this view.

  <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> 

then error when submit form. in gsp, when printing data,

exception evaluating property 'datebreak' java.util.arrays$arraylist, reason: groovy.lang.missingpropertyexception: no such property: datebreak class: java.sql.timestamp  

could please tell me how join tables in grails executequery , nice learn with, withcriteria

resultado = btr .executequery("select datebreak, timebreak, typebreak,  user, usuario.rol btr inner join user on user = usuario.rol  datebreak between :startdate" , :stopdate", [startdate:  df.parse(startdate), stopdate: df.parse(stopdate)]) 

should be

resultado = btr .executequery("""select new map (btr.datebreak datebreak, btr.timebreak timebreak, btr.typebreak typebreak,  u user, user.usuario.rol  rol) btr btr join btr.user u  btr.datebreak between :startdate , :stopdate""", [startdate:  df.parse(startdate), stopdate: df.parse(stopdate)]) 

what have raw sql , not hql slight variation , uses actual domain objects join

use left join hasmany may null join typical 1 one relationship

also use left join if 1 one relationship can null

beyond have put actual query raw sql query

def sql=new sql(datasource) return sql.rows(query,whereparams) 

Comments