Поднимите маппер afterCreate до afterSave - PullRequest
1 голос
/ 27 октября 2010

знаете ли вы, почему методы 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")
}

Заранее спасибо, Etam.

1 Ответ

1 голос
/ 29 октября 2010

«Жизненным циклом», на который ссылаются обратные вызовы, является жизненный цикл постоянства базы данных.Таким образом, в этом случае создание, на которое ссылаются, является фактическим созданием или INSERT объекта в базе данных.Аналогично, beforeUpdate и afterUpdate относятся к моменту до и после отправки в базу данных оператора UPDATE.

Если вам нужно задействовать создание объекта, вы можете сделать это с помощью обычных механизмов Scalaконструктор или какая-то фабрика для создания объектов.

Хотя я согласен с тем, что это в некотором смысле неправильное название, это неправильное число, которое очень часто встречается в различных существующих продуктах ORM.

...