【发布时间】:2020-05-14 01:49:13
【问题描述】:
我使用 hibernate-gorm 创建了 micronaut 项目,它为我提供了 GORM 和 Groovy 功能,但是当它没有 groovy.sql.Sql 类并且如果我注入 DataSource 时,它也不起作用。是否可以将原生 SQL 查询与 micronaut hiberate-gorm 一起使用?
【问题讨论】:
标签: sql hibernate grails-orm micronaut
我使用 hibernate-gorm 创建了 micronaut 项目,它为我提供了 GORM 和 Groovy 功能,但是当它没有 groovy.sql.Sql 类并且如果我注入 DataSource 时,它也不起作用。是否可以将原生 SQL 查询与 micronaut hiberate-gorm 一起使用?
【问题讨论】:
标签: sql hibernate grails-orm micronaut
是的,这是可能的。看例子:
import grails.gorm.annotation.Entity
import grails.gorm.hibernate.HibernateEntity
@Entity
class Planet implements HibernateEntity<Planet> {
String name
}
在这种情况下,实现HibernateEntity 很重要,然后您将拥有findWithSql 方法可用,如下面使用Spock 框架实现的单元测试所示:
import grails.gorm.transactions.Transactional
import io.micronaut.test.annotation.MicronautTest
import spock.lang.Specification
@MicronautTest
class PlanetSpec extends Specification {
@Transactional
void 'Planet is found when using native query'() {
given:
new Planet(name: 'Mars').save()
new Planet(name: 'Earth').save(flush: true)
when:
def actual = Planet.findWithSql("select * from planet p where p.name = 'Mars'")
then:
actual.name == 'Mars'
}
}
【讨论】:
我知道休眠中有一个 SQLQuery 方法可以针对数据库引擎运行本机查询。你试过了吗?
【讨论】: