0

ORMにScala、JodaTime、Squerylを使用する。アプリケーションが起動すると、JodaTimeを使用して生成されたタイムスタンプが呼び出されるたびに再初期化されないという厄介な問題があります。代わりに、時間を1回設定し、SQLが呼び出されるたびに煩わしく再初期化することはありません。

以下のコード。まず、時間パラメータ:

val todayEnd = new Timestamp(new DateMidnight(now,  DateTimeZone.forID("America/Los_Angeles")).plusDays(1).getMillis())

そしてSquerylJOIN:

join(DB.jobs, DB.clients.leftOuter, DB.projects.leftOuter)((j,c,p) =>
        where((j.teamId === teamId)
          and (j.startTime < todayEnd)
          and (j.userId isNotNull)
          and (j.canceled === false)
          and (j.completed === false))
        select(j,c,p)
        on(j.clientId === c.map(_.id), j.projectId === p.map(_.id)))

奇妙な部分は、 JodaTimeなしtodayEndでタイムスタンプを生成すると、毎回再初期化されることです。では、JodaTimeは何が違うのでしょうか?

4

1 に答える 1

0

問題が見つかりました。明らかに、JOINを管理しているスレッドが正常にシャットダウンされておらず、Akka内で再参照されていました。これは、todayEnd変数が再初期化されていないことを意味します。

したがって、持ち帰りのレッスンは次のとおりです。スレッドを管理します。

アップデート

さらに学んだように、時間値を保持する元のオブジェクトはとして設定されましvalた。結局のところ、それらはである必要がありますdef

悪い:

val today = new Date()
lazy val today = new Date()

良い:

def today = new Date()
于 2012-08-09T19:14:21.893 に答える