Не удалось инициализировать исключение класса на Scala (возможно, ошибка) - PullRequest
2 голосов
/ 21 февраля 2011

Я занимаюсь разработкой веб-приложения с scala 2.8.1, scalatra 2.0.0.M2, squeryl 2.8.0 и scalate 2.0.0 и sbt

У меня проблема с, видимо, моделью или классом схемы. Когда я запускаю свои тесты, я получаю:

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

Если я пытаюсь запустить следующий код в консоли sbt-quick, я получаю сообщение об ошибке:

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)
);

Я не отобразил третью таблицу в своем коде. Что может происходить?

1 Ответ

5 голосов
/ 22 февраля 2011

В Squeryl вы должны определить конструктор по умолчанию, если у вас есть поля типа Option [_].Таким образом, для этого случая у вас будет

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

на myotherclass, чтобы Squeryl мог определить тип столбцов Option [_].См. Раздел с пометкой Обнуляемые столбцы сопоставляются с полями Option [] здесь http://squeryl.org/schema-definition.html

...