2012-06-23 10 views
15

Ich schreibe Playframework 2.0-Anwendung mit Scala und Anorm für den Zugriff auf db.Was ist der Zweck von Anorms Pk?

Zur Zeit verwende ich Pk[Long] für id Felder und ich bin besorgt über zusätzliche get Aufruf benötigt, um den tatsächlichen Wert zugreifen. Also fange ich an, für id Felder zu verwenden und alles funktioniert immer noch perfekt.

Was ist Pk ist für, und sollte ich es anstelle von einfachen Typen verwenden? Gibt mir Pk zusätzliche Funktionen/Vorteile gegenüber einfachen Typen?

Antwort

18

Pk können Sie einen typisierten Primärschlüssel angeben.

Auch sagen Sie ein konstruiertes Modell wie dieses:

case class MyModel(id: Pk[Long], foo: String) 

Sie haben den Vorteil, eine Instanz des Modells konstruieren mit:

MyModel(anorm.NotAssigned, "notKnownAtRuntime") 

... wenn Ihre Datenbank ist verantwortlich zum Generieren Ihrer Schlüssel oder sonstwie:

+0

Ich weiß über 'NotAssigned', es ist praktisch, da ID automatisch generiert lly. Ich dachte nur, dass da noch etwas anderes ist. Trotzdem danke! – lambdas

+4

Warum nicht 'Option [Long]' verwenden und dann Ihre Objekte mit 'None' oder' Some (123L) 'initialisieren? – maklemenz

+2

@mklemenz weil '' 'Fallklasse MyModel (id: Pk [Lang], id2: Pk [Long])' '' sollte nicht kompilieren wo '' 'Fallklasse MyModel (id: Option [Long], id2: Option [ Long]) '' 'kompiliert –