3

我的应用程序具有与相册和单张照片具有相同逻辑关系的域类。List为关联使用 ahasMany应该支持单个专辑内的向后和向前移动,而无需显式管理位置字段或上一个/下一个指针。

例如:

class Album {
    static hasMany = [photos: Photo]
    List photos // Generates column `album_idx` in table for Photo.
    Integer size // Memoized.
}

class Photo {
    static belongsTo = [album: Album]
    static hasOne = [content: PhotoData] // PhotoData has byte[] field for data
}

class Controller {
    def prev() {
        def prevIdx = idx==0 ? album.size - 1 : idx -1 // etc.
    }
}

我可以在_idx没有本机 SQL 查询的情况下访问 的值吗?

我试过了photo.album.photos.indexOf(photo),但indexOf返回-1是因为加载显然太懒了indexOf,但总的来说我确实想要延迟加载。我责怪延迟加载,因为在调试器列表中的项目是随机填充的,我怀疑那些之前只是缓存的项目。我可能在这里误解了 GORM 的行为。

无论如何photo.album.photos.indexOf(photo),它比直接字段访问更丑陋并且(可能)更慢。理想情况下,我可以定义生成的_idx列和 中的字段之间的映射Photo,以允许使用photo.albumIdx.

4

1 回答 1

4

indexColumn与可更新和可插入映射结合使用,您可以让集合项(例如您的照片)具有索引意识。例如:

class Album {
    static hasMany = [photos: Photo]
    List photos // Generates column `album_idx` in table for Photo.
    Integer size // Memoized.

    static mapping = {
      photos indexColumn: [name: "position", type: Integer]
    }
}

class Photo {
    Integer position

    static belongsTo = [album: Album]
    static hasOne = [content: PhotoData] // PhotoData has byte[] field for data

    static mapping = {
      position updateable: false, insertable: false
    }
}

photo.position现在会给你这张照片的索引(注意:默认情况下,列表顺序是从 0 开始的)

于 2013-08-30T18:45:25.503 回答