2012-03-19 79 views
1

使用Play! 1.2.4,Scala和Squgyl與Postgres簡單數據庫插入Squeryl NullPointerException?

像往常一樣執行一個簡單的數據庫插入,所有突然間數據庫已經開始拋出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 

幫助表示讚賞

從未見過這一點,它可能是一個簡單的修復,你的幫助是非常讚賞。

回答

0

這是一個簡單的修復,我有點驚訝,我沒有在編譯過程中出現呃逆。

當組裝我的成員類時,我使用Scala None而不是null作爲第三個值,它工作得很好。

Squeryl無法提供更好的調試錯誤。

+0

不是Squeryl的錯。 Scala的設計使NullPointerExceptions難以運行,並且在大多數情況下不可能運行。我/將會/期望的是,編譯器警告告訴你,在最有可能不適用的情況下使用空值。 – 2012-03-19 13:22:49

+0

同意,也許這是未來的功能? ;)很可能很難正確檢測,因爲null值不影響類,但它似乎影響了數據庫,但我只是一個新手,很可能不知道我在說什麼。 – crockpotveggies 2012-03-19 19:39:20

相關問題