Mam pewne intuicyjne uczucie, że dodawanie pól, które nie są mapowane do DB, uszkadza klasy jednostek i jest złym sposobem rozwiązywania problemów.Mam wrażenie, że dodawanie pól oznaczonych adnotacją @Transient do encji jest bardzo podatne na błędy. Czy mam rację?
Ale czy są konkretne sytuacje, w których używanie pól @Transient
prowadzi do ukrytych i trudnych problemów z utrwalaniem?
Na przykład, czy dodanie lub usunięcie pamięci podręcznej drugiego poziomu spowoduje przerwanie naszej aplikacji, gdy w naszych jednostkach są pola @Transient
?
Znaczna zmiana: po pewnym myśleniu o @Transient
dziedzinach wydaje mi się, że @Transient
pola powinny być stosowane tylko w odpowiedni sposób.
Przez "właściwy sposób" rozumiem, że podmiot powinien zawsze mieć takie samo zachowanie. Oznacza to, że jest to zachowanie bardzo podatne na błędy, gdy gettery zwracają się od czasu do czasu w zależności od wartości pola @Transient. Oznacza to, że pola @Transient powinny zawsze być inicjowane.
I widzę tylko 2 przypadki prawidłowego wykorzystania:
pola @Transient powinny zostać zainicjowane w konstruktorze obiektu:
@Entity public class SomeEntity @Id private long id; @Transient private String transientField; public SomeEntity() { transientField = "some string"; } ... }
pola @Transient może być leniwy zainicjowany:
@Entity public class SomeEntity @Id private long id; @Transient private String transientField; public String getTransientField() { synchronized (lock) { if (transientField == null) { transientField = "some string"; } } return transientField; } ... }
Czy ktoś może zgłaszać te 2 przypadki lub opisywać inne przypadki, które przeoczyłem?
Kiedy mówisz "filozoficzny", masz na myśli "intuicyjny"? –