【问题标题】:Grails 2.4.4: Database record updates on createCriteria().list()Grails 2.4.4:createCriteria().list() 上的数据库记录更新
【发布时间】:2016-06-23 12:53:55
【问题描述】:

我遇到了一个奇怪的问题。我有一个域对象:

    class MyClass {
        String name
        Boolean new = true
        String number
        String type
        Byte[] data    
        Date dateCreated      
        Date lastUpdated

        static belongsTo = [
            other: MyOtherClass
        ]

        static mapping = {
            table 'my_classes'
            data column: "data", sqlType: "MEDIUMBLOB"
        }

        static constraints = {
            data  maxSize: 8000 * 66
            number nullable: true
        }
    }

在我拥有的控制器中(已编辑以显示整个方法):

def list = {
    def myOtherClasses = MyOtherClass.getAll()

    if ( !params.max ) params.max = 20

    if ( !params.sort && !params.order ) {
        params.sort = "new"
        params.order= "desc"
    }

    def myClassCount = MyClass.createCriteria().count() {
        'in'( 'other', myOtherClasses )
        order( params.sort, params.order )
    }

    def myClassList = MyClass.createCriteria().list() {
        'in'( 'other', myOtherClasses )
        order( params.sort, params.order )
    }

    return [ myClassList: myClassList, myClassCount: myClassCount ]
}

结果是否正常且视图正确。但是这段代码每次运行时,data属性都是Dirty,所​​以version递增,lastUpdated更新。

data 属性保存音频数据,但我认为这无关紧要。

我无法弄清楚这里发生了什么。所以我的问题是,如何让它停止更新?

使用: 圣杯 2.4.4 休眠 3.6.10.18 MySQL 5.7.9

提前致谢:)

【问题讨论】:

  • 你能发布控制器动作的其余部分吗?
  • 我按要求添加了其余的方法。

标签: mysql hibernate grails grails-orm


【解决方案1】:

经过大量研究和测试,以及几篇很棒的文章,我找到了解决方案:

我没有在 Domain Object 中使用 Byte[] 类型,而是使用 java.sql.Blob,并删除了映射中的 sqlType。

在控制器中,我必须进行一些更改才能从 Blob 访问 Byte[] 数据,但这很容易。

我仍然不知道为什么会发生这种情况,也找不到任何相关信息,但它现在按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多