2010-10-27 29 views
1

savez-vous pourquoi les méthodes afterCreate ne sont pas appelées après la création de l'objet? Regardez ce code:Ascenseur mapper afterCreate beforeSave

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

qui produit:

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

Le modèle Company ressemble à ceci:

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") 
} 

Merci à l'avance, Etam.

Répondre

1

Le «cycle de vie» auquel se réfèrent les rappels est le cycle de vie de la persistance de la base de données. Ainsi, dans ce cas, la création à laquelle il est fait référence est la création réelle, ou INSERT, de l'objet dans la base de données. De même, beforeUpdate et afterUpdate se réfèrent à l'instant avant et après l'envoi d'une instruction UPDATE à la base de données.

Si vous avez besoin de puiser dans la création de l'objet, vous pouvez le faire via les mécanismes Scala normaux d'un constructeur ou d'une usine pour créer les objets.

Même si je suis d'accord que c'est un peu abusif, c'est un terme impropre qui est très commun à travers les différents produits ORM qui existent.