1

私はScalaとScalaQueryにまったく慣れておらず、数週間使用しています。関数を呼び出してクエリの条件を把握しようとしていますが、Tの代わりにNamedColumn [T]が表示されます。解凍するにはどうすればよいですか?

2番目のリンクの20行目を参照してください。

タイプマッパー付きのパッケージ:https ://gist.github.com/3469291

テーブルオブジェクト:https ://gist.github.com/3469291

case class MyObject (
        id: Long,
        created: JodaTime
        modified: JodaTime
        special: JodaTime
)

object MyObjects extends Table[MyObject]("my_objects") {

  lazy val database = Database.forDataSource(DB.getDataSource())

  def id = column[Long]("id", O PrimaryKey, O AutoInc, O NotNull)
  def created = column[JodaTime]("created", O NotNull)
  def modified = column[JodaTime]("modified", O NotNull)
  def special = column[JodaTime]("special", O NotNull)
  def * = id ~ created <> (MyObject, MyObject.unapply _)

  def getMarker(time: JodaTime) = database.withSession { implicit db:Session =>
    (for {
      e <- MyObjects if (new org.joda.time.Interval(e.created, e.modified).contains(e.special)
    } yield (e.id, e.created)).firstOption
  }
}

e.created / modify / specialはNamedColumnsであるため、コンストラクターと関数呼び出しは機能しません。これを機能させるにはどうすればよいですか?

私は自分のオブジェクトをテストしませんでした。クラスを取得して、名前を削除して名前を変更しましたが、自分が持っていることとやりたいことを示すためだけです。

ありがとう。

4

1 に答える 1

1

ScalaQueriesの素晴らしい構文にだまされる可能性があると思います。ScalaQueryテーブルに基づく理解のために任意の条件を突き出すことはできません。

条件はJVMによって実行されませんが、SQLに変換されます。これは明らかに任意のScalaコードでは機能しませんが、ScalaQueryによって提供される特別な操作のみです。

次のバージョンが機能するはずです。

for {
  e <- MyObjects 
  if (e.created < e.special)
  if (e.modified > e.special)
}

のセマンティクスについてはわからないので、いくつかまたはそこInterval.containsにスローする必要があるかもしれないことに注意してください。>=<=

于 2012-08-25T21:31:17.237 に答える