2012-09-17 15 views
12

Rozważmy dwie klasy przykładów domen Grails.Czy istnieje jakaś różnica między deklaracjami "statycznych przejściowych" i "przejściowych typu aField" dla GORM?

1 klasa:

class Person { 

    String name 
    Integer counter = 0 

    static transients = ['counter'] 
} 

2 klasy:

class Vehicle { 

    String name 
    transient Integer counter = 0 
} 

Czy będzie jakaś różnica w GORM utrzymywanie lub domena klasy zachowanie na licznik dziedzinie całkowitą pomiędzy klasami Osoba i Pojazd?

EDYCJA: Wiem, że klasa jest dobrym sposobem, aby to zrobić, jak odniesienia do dokumentacji Grails. Jednak wolałbym klasę pojazdu w klasie, ponieważ wydaje się to być bardziej oczywiste i łatwiejsze do pominięcia podczas czytania kodu.

Odpowiedz

15

Dwa mechanizmy definiują różne rodzaje "przemijania". static transients definiuje właściwości komponentu bean, które nie powinny być odwzorowane w bazie danych przez Hibernate, podczas gdy słowo kluczowe transient oznacza pole, które nie powinno być zapisane przez mechanizm serializacji obiektów Java (np. W przypadku korzystania z webflow). Oba mają swoje zastosowania w różnych sytuacjach.

+0

Tak, to prawda. Byłem tego trochę świadomy, ale kiedy właściwość umieszczana jest na liście statycznych stanów nieustalonych, to również nie jest serializowana (na przykład przy używaniu rzutowania "jako XML"). Tak więc było to zachowanie podobne do przejściowego słowa kluczowego. Sprawdziłem również teraz, że przejściowy licznik Integer jest eksportowany do schematu DB, tak czy inaczej te dwa nie mają nic wspólnego. W każdym razie twoja odpowiedź jest wystarczająco dobra, dziękuję! – topr

Powiązane problemy