我正在使用遗留数据库,并且与一个连接表有多对多的关联,我已经在很大程度上解决了映射工作正常.但是还有一个列,如果是Book,作者模型可以说nm_author_books包含一个名为'royalty'的字段.问题是如何从任何方向访问此字段?
class Book {
String title
static belongsTo = Author
static hasMany = [authors: Author]
static mapping = { authors joinTable: [name: "mm_author_books", key: 'mm_book_id' ] }
}
class Author {
String name
static hasMany = [books: Book]
static mapping = { books joinTable: [name: "mm_author_books", key: 'mm_author_id'] }
}
Run Code Online (Sandbox Code Playgroud)
如果nm_author_book表具有[nm_book_id,nm_author_id,royalty],访问版税的方式是什么?
在属性上使用投影时,结果将作为列表返回,其中元素的顺序与投影块中定义的顺序相同.同时,列表中缺少属性名称,这对开发人员来说确实是不利的,因为结果将被传递,并且调用者需要知道哪个值属于哪个属性.有没有办法从Criteria查询返回一个带有属性名称作为值的键的映射?
所以,以下代码:
def c = Trade.createCriteria()
def remicTrades = c.list {
projections {
property('title', 'title')
property('author.name', 'author')
}
def now = new Date()
between('publishedDate', now-365, now)
}
Run Code Online (Sandbox Code Playgroud)
返回:
[['book1', 'author1']['book2', 'author2']]
Run Code Online (Sandbox Code Playgroud)
相反,我希望它返回:
[[book:'book1', author:'author1'][book:'book2', author:'author2']]
Run Code Online (Sandbox Code Playgroud)
我知道我可以在得到结果之后安排这种方式,但我认真地认为标准应该使用属性别名来返回模仿SQL查询结果的地图列表,而不是一个平淡无奇的列表.
试图通过理解生成一个列表,在某些时候我开始看到奇怪的字符串.无法解释他们在这一点上的存在(猜测转义字符是ASCII码 - 但为什么?):
45> [[round(math:pow(X,2))] ++ [Y]|| X <- lists:seq(5,10), Y <- lists:seq(5,10)].
[[25,5],
[25,6],
[25,7],
[25,8],
[25,9],
[25,10],
[36,5],
[36,6],
[36,7],
"$\b","$\t","$\n",
[49,5],
[49,6],
[49,7],
"1\b","1\t","1\n",
[64,5],
[64,6],
[64,7],
"@\b","@\t","@\n",
[81,5],
[81,6],
[81,7],
"Q\b",
[...]|...]
Run Code Online (Sandbox Code Playgroud)