次の問題で行き詰まりました。
次のようなPostというクラスがあります。
case class Post (
id: Int,
slug: String,
title: String,
@Column("postText")
text: String,
isVisible: Boolean,
created: Timestamp,
lastUpdated: Timestamp,
published: Option[Timestamp]
) extends KeyedEntity[Int]
私の問題は、投稿が公開されたフィールドで並べ替えられているときに、データベースから前の投稿と次の投稿を取得すること です。私が立ち往生している問題は、公開されたフィールドが Option[Timestamp] であることです。次のような Squeryl クエリを作成しました。
val nextPost = from(postTable)( p =>
where((p.published > post.published) and p.isVisible === true)
select(p)
orderBy(p.published asc)
).page(0, 1)
結果のSQLを見ると、「... WHERE post.published > Some("....") ...」のようなものがあり、もちろんこれはSQLクエリで構文エラーを引き起こしました。
ドキュメントを調べましたが、答えが見つかりません。すでにSlickへの乗り換えを考えています...
アップデート
squeryl mysql クエリの構築には明確なバグがあります。私はで終わった
val x : Timestamp = post.published.getOrElse(new Timestamp(0))
val nextPost = from(postTable)( p =>
where((p.published.getOrElse(new Timestamp(0)) > x) and p.isVisible === true)
select(p)
orderBy(p.published asc)
).page(0, 1)
クエリを生成します:
Select
Post9.lastUpdated as Post9_lastUpdated,
Post9.published as Post9_published,
Post9.postText as Post9_postText,
Post9.slug as Post9_slug,
Post9.id as Post9_id,
Post9.isVisible as Post9_isVisible,
Post9.title as Post9_title,
Post9.created as Post9_created
From
Post Post9
Where
((Post9.published > 2013-08-01 14:21:25.0) and (Post9.isVisible = true))
Order By
Post9.published Asc
limit 1 offset 0
クエリコンストラクターが日付をどのようにフォーマットしたかを見てください...
SLICKに乗り換えました。