gpt4 book ai didi

hibernate - 如何在Grails/GORM/Hibernate中执行特定的SQL

转载 作者:行者123 更新时间:2023-12-02 14:29:57 27 4
gpt4 key购买 nike

我在Grails中有类似的域:

class Questao {

static transients = [ "tags" ]

String enunciado
Double valorQuestao
byte[] imagem
public enum Tipo {
ALTERNATIVAS,
VF,
SUBJETIVA
}

Tipo tipoQuestao

static hasMany = [alternativas:Alternativas, assuntos: QuestaoAssunto, provas: Prova]

static belongsTo = [Prova]

static mapping = { enunciado type: 'text'}

static constraints = {
imagem nullable: true, maxSize: 160384
alternativas nullable: true
}
}

class QuestaoAssunto {

Questao questao
Assunto assunto

static belongsTo = [Questao,Assunto]

}
class Assunto {

String titulo

static hasMany = [questoes:QuestaoAssunto]

static belongsTo = [Questao]
}

我需要执行以下SQL:
select q.* from questao_assunto qa join questao q on q.id=qa.questao_id where assunto_id in (:assuntos_id) and q.tipo_questao = 'SUBJETIVA' GROUP BY q.id order by rand() limit 1;

:assuntos_id是一个像[5,6]的数组

如何做到这一点?

最佳答案

这是一个如何从服务执行SQL的示例。可以在 Controller 中使用相同的方法:

import groovy.sql.Sql
import groovy.sql.GroovyRowResult

class SomeService {

// Reference to default datasource.
def dataSource

List<GroovyRowResult> executeQuery(assuntosId) {

final String query = '''\
select q.*
from questao_assunto qa
join questao q on q.id=qa.questao_id
where assunto_id in (:assuntos_id)
and q.tipo_questao = 'SUBJETIVA'
group by q.id
order by rand()
limit 1
'''

// Create new Groovy SQL instance with injected DataSource.
final Sql sql = new Sql(dataSource)

final results = sql.rows(query, assuntos_id: assuntosId)
results
}
}

关于hibernate - 如何在Grails/GORM/Hibernate中执行特定的SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38257915/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com