squeryl:带有连接字符串的更新列时出错

时间:2013-11-13 22:43:21

标签: squeryl

我正在尝试使用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 documentation并尝试使用:

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

1 个答案:

答案 0 :(得分:0)

您需要使用.~运算符来转换字段 “s.default_year”进入AST节点,试试这个:

update(songs)(s =>
  where(s.name isNull)
  set(s.year_str := s.default_year.~ || " AD")
)

如果您使用的是0.9.6版本的Squeryl,则可能需要这样做:

set(s.year_str := s.default_year.~ || Some(" AD"))