¿Cuál es la mejor manera de declarar asociación clasificada en clases griales de dominio?

StackOverflow https://stackoverflow.com/questions/2840364

Pregunta

Parece que hay dos maneras diferentes de declarar asociaciones ordenados en Grails:

Método 1 (véase aquí ) usando orden predeterminado

class Book {
  String title 
}
class Author {
  static hasMany = [books : Book]
  static mapping = { books sort: "title"}
}

Método 2 (véase aquí ) usando SortedSet

class Book implements Comparable {
  String title
  int compareTo(obj) {
    title <=> obj.title
  }
}
class Author {
  SortedSet books
  static hasMany = [books : Book]
}

No estoy seguro de cuál usar y cuál es la diferencia (si lo hay), pros y contras entre el uso de uno contra el otro.

Le agradecería cualquier aclaración.

Gracias

¿Fue útil?

Solución

Me empezó a excavar en cómo funciona todo esto y luego descubrieron que el método 1 es en realidad eliminado en las versiones actuales de griales (probado tanto en 1.2.1 y 1.3). Cuando realmente se intenta recuperar un autor y mirarlo de libros, se produce una excepción

Hay un defecto abierto para él ( 4089 ) que ha estado abierto durante bastante un tiempo.

Aquí está la excepción de que se tira:

ERROR util.JDBCExceptionReporter  - Column not found: BOOKS0_.TITLE in statement [select books0_.author_books_id as author1_0_, books0_.book_id as book2_0_ from author_book books0_ where books0_.author_books_id=? order by books0_.title]

Si y cuando finalmente arreglan, las diferencias entre los dos métodos es que en el método uno, la clasificación se realiza a nivel de base de datos. Como se puede ver en la excepción anterior, GORM estaba tratando de hacer una "orden por books0_.title" que utilizaría cualquier índice de base de datos en el campo book.title y devolver los objetos en ese orden.

El segundo método sería ordenar los objetos en la memoria en el momento que se insertan en el conjunto (utilizando el método compareTo que se definió).

Hasta que el problema actual es fija, usaría el método 2, porque es el único que funciona. Debería estar bien para relativamente pequeñas colecciones de cosas. Después de que se fija, yo prefiero potencialmente método 1 como la base de datos debe ser más rápido en hacer la clasificación con un índice en el campo de ordenación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top