2016-06-23 8 views
1

Ich habe ein komisches Problem. Ich habe ein Domain-Objekt:Grails 2.4.4: Update der Datenbankaufzeichnungen auf createCriteria(). List()

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

im Controller I (bearbeitet gesamte Verfahren zu zeigen) haben:

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

Das Ergebnis, wenn in Ordnung und die Aussicht ist richtig. Aber jedes Mal, wenn dieser Code ausgeführt wird, ist die Dateneigenschaft "Dirty", also wird die Version erhöht und "lastUpdated" wird aktualisiert.

Die Daten-Eigenschaft hält Audiodaten, aber ich denke nicht, dass das relevant ist.

Ich kann nicht herausfinden, was hier vor sich geht. Meine Frage ist also, wie kann ich die Aktualisierung stoppen?

Verwendung: Grails 2.4.4 Hibernate 3.6.10.18 MySQL 5.7.9

Vielen Dank im Voraus :)

+0

Können Sie bitte den Rest der Controller-Aktion posten? – dpcasady

+0

Ich habe den Rest der Methode wie gewünscht hinzugefügt. – havoc74

Antwort

1

Nach viel Forschung und Tests, und ein paar große Artikel, ich habe eine gefunden Lösung:

Anstatt Typ Byte [] im Domain-Objekt zu verwenden, verwende ich java.sql.Blob und entfernte den sqlType im Mapping.

In der Steuerung musste ich einige Änderungen vornehmen, um auf die Byte [] - Daten vom Blob zuzugreifen, aber das war einfach.

Ich weiß immer noch nicht, warum das passierte, und ich konnte keine Informationen darüber finden, aber es funktioniert jetzt wie erwartet.