2

私はscala2.8.1、scalatra 2.0.0.M2、squeryl 2.8.0、scalate2.0.0およびsbtを使用してWebアプリケーションを開発しています。

どうやらモデルまたはスキーマクラスに問題があります。テストを実行すると、次のようになります。

java.lang.NoClassDefFoundError: Could not initialize class org.mycompany.myproject.model.myschema

sbtのコンソールで次のコードを実行しようとすると、すぐにエラーが発生します。

import org.mycompany.myproject.model.myschema
myschema.mytable

エラー:

java.lang.RuntimeException: Could not deduce Option[] type of field 'field1' of class org.mycompany.myproject.model.myotherclass

予想どおり、そのスキーマでどのメソッドを呼び出そうとしても、エラーがポップアップします。

これが私のスキーマがそのテーブル宣言の近くにどのように見えるかです:

object myschema extends Schema {
  val myotherclasses = table[myotherclass]
  val otherClassManyToMany = manyToManyRelation(yetanotherclass, mytables).
       via[myotherclass]((e,ssr, sse) => (e.id === sse.leftId, sse.rightId === ssr.id))
...
}

これは私のコードテーブルがどのように見えるかです:

class myotherclass(
  val rightId: Long,
  val field1: Option[Long],
  val field2: Option[Long],
  val foreiginKey: Long,
  val leftId: Long) extends KeyedEntity[CompositeKey2[Long, Long]] {
  def id ={compositeKey(sesestacao, sessensor)}
}

そして最後に私のSQL定義:

create table telemetria.myotherclass (
  rightId numeric(8,0) references telemetria.estacao(estcodigo),
  field1 numeric(8,0),
  field2 numeric(8,0),
  foreiginKey smallint references myschema.thirdtable(idOfThird),
  leftId smallint references myschema.yetanotherclass(id),
  primary key (rightId, leftId)
);

サードテーブルをコードにマップしていません。何が起こっているのでしょうか?

4

1 に答える 1

5

Squeryl では、Option[_] 型のフィールドがある場合、デフォルトのコンストラクターを定義する必要があります。したがって、この場合、次のようになります

def this() = this(0l, Some(0l), Some(0l), 0l, 0l)

myotherclassSqueryl が Option[_] 列の型を把握できるようにします。ここで Nullable 列が Option[] フィールドにマップされているというラベルの付いたセクションを参照してください http://squeryl.org/schema-definition.html

于 2011-02-21T21:56:30.550 に答える