2012-06-23 28 views
15

Piszę aplikację Playframework 2.0, używając Scala i Anorm, aby uzyskać dostęp do db.Jaki jest cel Pk anorma?

Obecnie używam Pk[Long] dla pól id i martwię się o dodatkowe wywołanie get potrzebne do uzyskania rzeczywistej wartości. Dlatego zaczynam używać zwykłych pól Long dla id i wszystko wciąż działa idealnie.

Do czego służy Pk i czy powinienem używać go zamiast zwykłych typów? Czy Pk daje mi dodatkowe funkcje/zalety w porównaniu z typami prostymi?

Odpowiedz

18

Pk pozwala określić wpisany klucz podstawowy.

Również powiedzieć masz contrived modelu takiego:

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

Musisz korzyści z budowy wystąpienie modelu z:

MyModel(anorm.NotAssigned, "notKnownAtRuntime") 

... jeśli baza danych jest odpowiedzialny do generowania kluczy lub w inny sposób:

MyModel(anorm.Id(123L), "knownAtRuntime") 
+0

Wiem o "NotAssigned", jest przydatny, ponieważ id generuje automaticę Lly. Po prostu pomyślałem, że jest coś jeszcze. Mimo wszystko dziekuję! – lambdas

+4

Dlaczego nie używać 'Opcji [Long]', a następnie zainicjować swoje Obiekty za pomocą 'Brak' lub' Niektóre (123L) '? – maklemenz

+2

@mklemenz, ponieważ '' case class MyModel (id: Pk [Long], id2: Pk [Long]) '' 'nie powinno się kompilować, gdy' '' case class MyModel (id: Option [Long], id2: Option [ Long]) Kompiluje '' ' –