在afterSave之前提升映射器afterCreate

时间:2010-10-27 17:38:39

标签: scala persistence lift mapper

你知道为什么在创建对象后没有调用afterCreate方法吗?看看这段代码:

val c = Company.create
println(">>> After create")
c.save

产生:

c: com.subeli.officebook.model.Company = 0
>>> After create
create packages
create packages
save packages

公司模型如下所示:

object Company extends Company with LongKeyedMetaMapper[Company] with CRUDify[Long, Company] {
  override def dbTableName = "company"

  override def beforeCreate = createPackages _ :: super.beforeCreate
  override def afterCreate = createPackages _ :: super.afterCreate
  override def afterSave = savePackages _ :: super.afterSave
  override def afterUpdate = savePackages _ :: super.afterUpdate

  private def createPackages(c: Company): Unit = println("create packages")
  private def savePackages(c: Company): Unit = println("save packages")
}

提前致谢, 艾格。

1 个答案:

答案 0 :(得分:1)

回调引用的“生命周期”是数据库持久性生命周期。因此,在这种情况下,所引用的create是数据库中对象的实际创建或INSERT。同样,beforeUpdate和afterUpdate引用UPDATE语句发送到数据库之前和之后的那一刻。

如果您需要使用对象的创建,可以通过构造函数或某个工厂的常规Scala机制来创建对象。

虽然我同意这有点用词不当,但在现有的各种ORM产品中,这是一种非常普遍的误称。