首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SORM持久化“id”未定义

SORM持久化“id”未定义
EN

Stack Overflow用户
提问于 2013-11-16 23:10:09
回答 1查看 276关注 0票数 2

我只是试着学习SORM,并玩一些我认为是简单的示例代码。使:

代码语言:javascript
复制
case class Book(var author:String, var title:String);

object Db extends Instance(
  entities = Set(Entity[Book]()),
  url = "jdbc:h2:mem:test",
  user = "",
  password = "",
  initMode = InitMode.Create
)

然后:

代码语言:javascript
复制
val b : Book with Persisted = Db.save( Book("foo","bar")  )

当我试图编译它时,我得到:

代码语言:javascript
复制
[error] /Users/rjf/IdeaProjects/PlayTest/app/controllers/Application.scala:22: type mismatch;
[error]  found   : models.Book
[error]  required: sorm.Persisted with models.Book
[error]     val b : Book with Persisted = Db.save( Book("foo","bar")  )
[error]                                                ^

如果我将Book声明更改为:

代码语言:javascript
复制
case class Book(var author:String, var title:String) extends Persisted;

然后我得到:

代码语言:javascript
复制
[error] /Users/rjf/IdeaProjects/PlayTest/app/models/Book.scala:17: class Book needs to be abstract, since:
[error] it has 2 unimplemented members.
[error] /** As seen from class Book, the missing signatures are as follows.
[error]  *  For convenience, these are usable as stub implementations.
[error]  */
[error]   def id: Long = ???
[error]   def mixoutPersisted[T]: (Long, T) = ???
[error] case class Book(var author:String, var title:String) extends Persisted;
[error]            ^

为新手的问题道歉。毫无疑问,我同时学习Scala是一个因素。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-17 13:47:41

要解决问题,只需删除显式类型注释:

代码语言:javascript
复制
val b = Db.save( Book("foo","bar") )

别担心,您仍然可以访问与Book with Persisted相同的接口。

至于为什么会发生这种情况,这似乎是Scala和据报道的一个bug。

旁白

不要在case类声明中使用var。不变性是案例类的全部要点。正确的声明是:

代码语言:javascript
复制
case class Book(author:String, title:String)

这和

代码语言:javascript
复制
case class Book(val author:String, val title:String)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20025098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档