我的应用程序具有与相册和单张照片具有相同逻辑关系的域类。对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.
}
}
我可以在没有本机SQL查询的情况下访问_idx
的值吗?
我已尝试过photo.album.photos.indexOf(photo)
,但indexOf
会返回-1
,因为加载显然对indexOf
来说太懒了,不过一般来说我做想要延迟加载。我责备延迟加载,因为在调试器列表中项目是随机填充的,我怀疑那些以前只是缓存的。我可能会误解GORM在这里的行为。
在任何情况下photo.album.photos.indexOf(photo)
都比直接的现场访问更加丑陋(可能)更慢。理想情况下,我可以在生成的_idx
列和Photo
中的字段之间定义映射,以允许使用photo.albumIdx
进行访问。
答案 0 :(得分:4)
将indexColumn与updateable和insertable映射结合使用,您可以识别收集项(例如您的照片)索引。例如:
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)