gpt4 book ai didi

hibernate - hasMany 关联的 GORM 访问列表索引

转载 作者:行者123 更新时间:2023-12-02 13:47:10 24 4
gpt4 key购买 nike

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

例如:

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

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

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

在任何情况下,photo.album.photos.indexOf(photo) 都比直接字段访问更难看并且(可能)更慢。理想情况下,我可以在生成的 _idx 列和 Photo 中的字段之间定义一个映射,以允许使用 photo.albumIdx 进行访问。

最佳答案

使用 indexColumn结合updateableinsertable映射,您可以让集合项(例如您的照片)索引感知。例如:

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 的)

关于hibernate - hasMany 关联的 GORM 访问列表索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18524281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com