Squeryl NullPointerException для простой базы данных Вставить? - PullRequest
1 голос
/ 19 марта 2012

Использование Play!1.2.4, Scala и Squeryl с Postgres

Выполнение простой вставки в БД, как обычно, и внезапно база данных начинает генерировать исключения NullPointerException как сумасшедшие.Все началось, когда я создал обработчик приглашений по электронной почте, который может автоматически добавлять кого-либо в учетную запись.

Код:

Member.scala, где происходит вставка:

def insert(member:Member) = DB.members.insert(member)

Код выше, где играть!указывает, что NullPointerException имеет место.Когда я запускаю отладчик на val member ниже, он показывает действительный класс Member с соответствующими значениями.

def invitation(s:Option[String]) = {
    s match {
      case Some(s) => {
        val invite = Invite.getByKey(s)

        invite match {
          case Some(invite) => {
            User.search(invite.email) match {
              case Some(user) => {
                  val member = new Member(user.id,invite.accountId,null)
                  Member.insert( member )
                  session.clear()
                  flash += "notice" -> "Success! Please login to continue."
                  Action(Authentication.login)
              }
              case _ => Action(Users.`new`(s))
            }
          }
          case None => Error("Invite does not exist.")
        }
      }
      case None => Action(Application.index)
    }
  }

Трассировка стека:

Internal Server Error (500) for request GET /invitation?s=e3dfd60e-bc07-496a-918
1-97c6ea4b0b71

Execution exception (In /app/models/Member.scala around line 59)
NullPointerException occured : null

! play.exceptions.JavaExecutionException
!       at play.mvc.ActionInvoker.invoke(ActionInvoker.java:231)
!       at Invocation.HTTP Request(Play!)
! Caused by: java.lang.NullPointerException
!       at org.squeryl.internals.FieldMetaData.get(FieldMetaData.scala:260)
!       at org.squeryl.internals.DatabaseAdapter$class.writeValue(DatabaseAdapte
r.scala:456)
!       at org.squeryl.adapters.PostgreSqlAdapter.writeValue(PostgreSqlAdapter.s
cala:24)
!       at org.squeryl.internals.DatabaseAdapter$$anonfun$writeInsert$2.apply(Da
tabaseAdapter.scala:415)
!       at org.squeryl.internals.DatabaseAdapter$$anonfun$writeInsert$2.apply(Da
tabaseAdapter.scala:415)
!       at org.squeryl.internals.DatabaseAdapter$class.writeInsert(DatabaseAdapt
er.scala:415)
!       at org.squeryl.adapters.PostgreSqlAdapter.writeInsert(PostgreSqlAdapter.
scala:70)
!       at org.squeryl.Table$$anonfun$insert$1.apply(Table.scala:39)
!       at org.squeryl.logging.StackMarker$.lastSquerylStackFrame(StatisticsList
ener.scala:52)
!       at org.squeryl.Table.insert(Table.scala:34)
!       at models.Member$.insert(Member.scala:59)
!       at controllers.Invites$.invitation(Invites.scala:24)
!       at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548)

!       at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502)
!       at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:496)

!       at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473)

!       at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
!       ... 1 more

Помощь оценена

Никогда не видел этого раньше, и это может быть простым исправлением, ваша помощь очень ценится.

1 Ответ

0 голосов
/ 19 марта 2012

Это было легко исправить, и я немного удивлен, что во время компиляции у меня не было сбоя.

При сборке класса Member я использовал Scala None вместо null для этого третьего значения, и он работал просто отлично.

Жаль, что Скверил не может выдать лучшую ошибку для отладки.

...