rev*_*nge 3 grails hibernate grails-orm
我的应用程序具有与相册和单张照片具有相同逻辑关系的域类。使用 aList进行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.
}
}
Run Code Online (Sandbox Code Playgroud)
我可以在没有本机 SQL 查询的情况下访问 的值吗_idx?
我已经尝试过photo.album.photos.indexOf(photo),但indexOf返回-1,因为加载显然太懒了indexOf,尽管一般来说我确实想要延迟加载。我归咎于延迟加载,因为在调试器列表中项目是随机填充的,我怀疑那些只是之前缓存的。我可能误解了 GORM 的行为。
无论如何,photo.album.photos.indexOf(photo)它比立即现场访问更丑陋并且(可能)更慢。_idx理想情况下,我可以定义生成的列和 中的字段之间的映射Photo,以允许使用 进行访问photo.albumIdx。
将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
}
}
Run Code Online (Sandbox Code Playgroud)
photo.position现在将为您提供这张照片的索引(注意:默认列表顺序是从 0 开始)
| 归档时间: |
|
| 查看次数: |
1560 次 |
| 最近记录: |