2016-04-11 25 views
-1

使用grails 3應用程序。我的域結構如下定義:Grails - 來自多個域的查詢列表項

Job{ 
Integer id 
String title 
Date publishedDate 
} 

JobType{ 
Integer id 
String name 

} 

JobJobTypeMap{ 
    String jobId 
    String jobTypeId 
} 

例如,

**Job** 
id title 
1 job1 
2 job2 

**JobType** 
id name 
1 govt 
2 private 

**JobJobTypeMap** 
jobId jobTypeId 
1  1 
1  2 
2  2 

我需要得到特別jobType的工作清單(偏移和最大屬性和爲了出版日期倒序排列)。

請不要問我改變域的結構。

任何建議,將不勝感激

+0

mongodb在哪裏?請廣告一些您試圖獲得答案的代碼。 – Sachin

回答

1

您沒有正確定義域類。您不必在Job和JobType之間創建關係類,Grails會自動在您的DB上執行。

Job{ 
Integer id 
String title 
Date publishedDate 
JobType jobType 
} 

JobType{ 
Integer id 
String name 

} 

List<Job> jobs = Job.findAllByJobType(jobTypeInstance, [sort: '', order:'', max: '', offset: '']) 
1

您必須使用Grails SQL/HSQL查詢數據庫。

在控制器

def getList() { 

    def params = [column:"job.title", order:'DESC', offset:0, limit:5] 

    Sql sql = new Sql(dataSource) 
    String query = """ 
     SELECT job_job_type_map.job_id jobId, job_job_type_map.job_type_id jobTypeId, 
       job.title jobTitle, jobType.name jobTypeName 
     FROM job job, job_type jobType, job_job_type_map job_job_type_map 
     WHERE job_job_type_map.job_id = job.id 
     AND  job_job_type_map.job_type_id = jobType.id 
     ORDER BY ${params.column} ${params.order} 
     LIMIT :limit 
     OFFSET :offset 
    """ 

    List<GroovyRowResult> result = sql.rows(query, params) 
    result.each { 
     println "${it.jobId} ${it.jobTypeId} ${it.jobTitle} ${it.jobTypeName}" 
    } 

    render template: 'list', model: [jobRows:result] 
} 

在GSP

<g:each in="${jobRows}" var="job"> 
    "${job.jobId} ${job.jobTypeId} ${job.jobTitle} ${job.jobTypeName}" <br/> 
</g:each> 

小心ORDER BY ${params.column} ${params.order} 有在某些地方使用named parameter限制。你可以找到here

享受!

+0

您還可以在https://github.com/mdaynul/jobproject4StackOverflow 上看到更多的解決方案,並使用HSQL和類別聯編。 – devbd

0

如果你不想改變域結構和不想寫SQL/HSQL那麼你可以使用這個方法:

def jobTypeId = JobType.findByName(params.jobTypeName).id 
def jobIdList = JobJobTypeMap.findAllByJobTypeId(jobTypeId)?.jobId 
def jobList = Job.createCriteria().list(max:max, offset:offset) { 
    'in'("id", jobIdList) 
    order("publishedDate", "desc") 
} 

招賢納纔會給你具體的工作類型的所有作業的列表,發佈日期的最大,偏移和排序。