hibernate - Grails 3-防止 Controller 退出后不必要的选择语句

标签 hibernate grails gorm

请原谅人为的例子。我只是不知道为什么会发生这些选择。

域对象:

class Author {
    String name
    Location location

    static mapping = {
        location lazy: true //this is default, but set here to reduce confusion
    }

    static constraints = {
    }
}

...
class Location {
    String address
    static hasOne = [longLat : LongLat]

    static constraints = {
    }
}

...
class LongLat {
    String longitude
    String latitude

    static belongsTo = [location:Location]

    static constraints = {
    }
}

...

bootstrap 初始化:
def init = { servletContext ->
        Location loc = new Location(address: '123 asdf dr', longLat: new LongLat(longitude: 0.5, latitude: 0.5)).save(flush:true)
        new Author(name: 'Author Name', location: loc).save(flush:true)
    }

...

来自 Controller 的 Action :
def index() {
    println "Start Controller"
    Author.get(1)
    render '1'
    println "End Controller"
}

我已启用日志记录:
logSql: true
formatSql: true

输出:
Grails application running at http://localhost:8080 in environment: development
Start Controller
Hibernate:
    select
        this_.id as id1_0_0_,
        this_.version as version2_0_0_,
        this_.location_id as location3_0_0_,
        this_.name as name4_0_0_
    from
        author this_
    where
        this_.id = ?
End Controller
Hibernate:
    select
        location0_.id as id1_1_0_,
        location0_.version as version2_1_0_,
        location0_.address as address3_1_0_
    from
        location location0_
    where
        location0_.id=?
Hibernate:
    select
        longlat0_.id as id1_2_0_,
        longlat0_.version as version2_2_0_,
        longlat0_.latitude as latitude3_2_0_,
        longlat0_.location_id as location4_2_0_,
        longlat0_.longitude as longitud5_2_0_
    from
        long_lat longlat0_
    where
        longlat0_.location_id=?

为什么最后两个选择会发生,如何在不诉诸HQL的情况下停止它们?

我正在使用Grails 3.2.3。

最佳答案

根据我们在评论中的对话,事实证明它很可能与OSIV( View 中的公开 session )有关。解决方案是使用.discard()来确保休眠状态不会检查是否有任何更改(例如,脏检查)并且需要持久化。

关于hibernate - Grails 3-防止 Controller 退出后不必要的选择语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41927422/

相关文章:

java - JPA Hibernate调用存储过程

html - 防止Grails输入标签添加id属性

hibernate - CreateAlias的重复关联路径异常

grails - 如何更改grails地址栏中的图标

java - Hibernate 不提交数据

java - hibernate 。用于从另一个类中按对象选择的条件查询?

java - Hibernate连接表错误: Unable to find column with logical name

grails - GORM在同一域上多对多

grails - Grails 3.2-通过分页和一对多关联进行选择

grails - Grails GORM约束