我正在尝试使用 squeryl 并使用与字符串连接的另一个值更新列。所以起初我尝试了这个(简化/人为的例子):
update(songs)(s =>
where(s.name isNull)
set(s.year_str := Some(s.default_year + " AD"))
这导致查询:
update `songs` set
`year_str` = (`songs`.`default_year`)
Where `songs`.`name` is null
请注意串联消失了!
我阅读了squeryl 文档并尝试了:
update(songs)(s =>
where(s.name isNull)
set(s.year_str := Some(&(s.default_year || " AD")))
这导致了 NullPointerException
Caused by: java.lang.NullPointerException: null
at org.squeryl.internals.FieldReferenceLinker$.pushExpressionOrCollectValue(FieldReferenceLinker.scala:36) ~[squeryl_2.10-0.9.6-M1.jar:0.9.6-M1]
at org.squeryl.dsl.QueryDsl$class.$amp(QueryDsl.scala:204) ~[squeryl_2.10-0.9.6-M1.jar:0.9.6-M1]
...
生成以下查询的 squeryl 方式是什么:
update `songs` set
`year_str` = concat(`songs`.`default_year`, 'AD')
Where `songs`.`name` is null