处理grails 3申请。我的域名结构定义如下:
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 :(得分: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 :(得分: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
享受!
答案 2 :(得分: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")
}
jobList将通过publishedDate为您提供具有特定作业类型,最大值,偏移量和顺序的所有作业的列表。