私のアプリケーションには、フォト アルバムや個々の写真と同じ論理関係を持つドメイン クラスがあります。関連付けにを使用するList
とhasMany
、位置フィールドや前/次のポインターを明示的に管理しなくても、個々のアルバム内での前後の移動がサポートされるはずです。
例えば:
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
戻ります。デバッガーのリストの項目はランダムに読み込まれ、以前に単にキャッシュされたものと思われるため、遅延読み込みのせいです。ここで GORM の動作を誤解している可能性があります。-1
indexOf
いずれphoto.album.photos.indexOf(photo)
にせよ、即時のフィールドアクセスよりも醜く、(おそらく) 遅くなります。理想的には、生成された_idx
列と のフィールドの間のマッピングを定義してPhoto
、 を使用してアクセスできるようにすることができますphoto.albumIdx
。