Использование Play! 1.2.4, Scala и Squeryl с PostgresSqueryl NullPointerException в простой базе данных Вставить?
Выполнение простой вставки DB, как обычно, и внезапно база данных начала бросать NullPointerExceptions как сумасшедшие. Все началось, когда я создал обработчик приглашения электронной почты, который может автоматически добавить кого-то в учетную запись.
Код:
Member.scala, где вставка имеет место:
def insert(member:Member) = DB.members.insert(member)
Код выше, где играть! указывает на исключение NullPointerException. Когда я запускаю отладчик на val 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
Помощь оценили
не видел это раньше, и это может быть легко исправить, ваша помощь очень ценится.
Не недостаток Squeryl. Scala спроектирован так, что NullPointerExceptions сложны и в большинстве случаев невозможны. То, что я/ожидал, - это предупреждение о компиляторе, указывающее, что вы используете нули, где это, скорее всего, неприемлемо. –
Согласен, может быть, это функция будущего? ;) вполне возможно, что это может быть трудно правильно обнаружить, поскольку нулевое значение не влияет на класс, но, похоже, оно повлияло на базу данных, но я только новичок и очень хорошо, возможно, не знаю, о чем я говорю. – crockpotveggies