konto usunięte
Temat: Integralność bazy danych , a integralność encji.
Ostatnio tak głęboko się zastanawiałem miałem przykładowe 2 encje wyglądało to na coś takiego:class test {
public List<TestType> testTypes;
}
Natomiast w TestTypes nie było odniesienia do klasy Test. Problem polegał na tym, że w aplikacji ktoś stworzył funkcjonalność umożliwiającą usunięcie tabeli TestType. Całość działała ale tylko wtedy gdy żadna encja Test nie miała odniesienia do TestType. Błąd naprawiłem więc na poziomie bazy danych (postgresql) tj. na w tabeli Test dodałem ON DELETE CASCADE i wszystko zaczęło chulać.
Jednak ktoś zapytał mnie dlaczego do encji TestType nie dodałem zależności do Test (na poziomie encji wiązanie FetchType.Lazy) i nie dałem tam Cascade itd. , argumentując takie rozwiązanie faktem, że lazy załatwia taką sprawę i jpa (toplink) się nie pogubi a do tego zostanie zachowana`Redundancja`.
Zastanawiam się które rozumowanie jest poprawne. Jak dla mnie niepotrzebne jest `obciążanie` encji TestType odwołaniem do Test, a dodawanie tego typu tylko po to żeby zapewnić odpowiednie usuwanie ?? Po drugie wydaje mi się, że zachowanie odpowiedniej spójności na bazie danych to inna sprawa niż aplikacja. Po trzecie przecież JPA sobie powinien poradzić (odpowiednio zinterpretować) ON DELETE CASCADE .....
PS. Spotkałem się z takim rozumowaniem, że jest dobrze aby używać `Redundancji`. Czyli jeśli w encji masz odniesienie typu @OneToMany , @OneToOne itd do innej to niech ta druga encja też posiada odniesienie...
Jak dla mnie jest to kwestia zastanowienia się czy jest taka potrzeba , a nie wszędzie gdzie się da ładować zależności .. Chyba, że się mylę ??Łukasz Woźniczka edytował(a) ten post dnia 16.02.13 o godzinie 12:58