Search code examples
mysqlhibernategrailsgrails-orm

Grails 2.4.4: Database record updates on createCriteria().list()


I am having a weird issue. I have a Domain object:

    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
        }
    }

In the Controller I have (edited to show entire method):

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 ]
}

The result if fine and the view is correct. But each time this code runs, the data property isDirty, so version is incremented, and lastUpdated is updated.

The data property is holding audio data, but I don't think that is relevant.

I can't figure out what is going on here. So my question is, how do I make it stop updating?

Using: Grails 2.4.4 Hibernate 3.6.10.18 MySQL 5.7.9

Thanks in advance :)


Solution

  • After much research and testing, and a few great articles, I have found a solution:

    Instead of using type Byte[] in the Domain Object, I use java.sql.Blob, and removed the sqlType in the mapping.

    In the controller, I had to make a few changes to access the Byte[] data from the Blob, but that was easy.

    I still don't know why this was happening, and I couldn't find any info on it, but it is working as expected now.