ZSBD-2st-1.2-lab6.tresc-1.3-Slajd14

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Usuwanie struktur z bazy danych

Usuwanie struktur z bazy danych


Dowolne obiekty, niezależnie od tego, czy są samodzielne, czy też są częścią jakiejś struktury, usuwa się za pomocą metody delete opisywanej wcześniej. Metoda ta usuwa jedynie obiekt, na który referencja została przekazana jako parametr. Nie ma globalnego parametru, podobnego do głębokości aktywacji, bądź głębokości aktualizacji, pozwalającego na usunięcie całej struktury danych za jednym wywołaniem metody. Możliwe jest jednak włączenie automatycznego usuwania obiektów bezpośrednio osiągalnych z obiektów konkretnej klasy, bądź obiektów wskazywanych przez określone pola określonych klas. Na ćwiczeniach pokazany zostanie jedynie sposób automatycznego usuwania obiektów bezpośrednio osiągalnych z obiektów konkretnej klasy. Automatyczne usuwanie włącza się za pomocą metody cascadeOnDelete interfejsu ObjectClass. Obiekty implementujące interfejs ObjectClass pozwalają na ustawianie parametrów konfiguracyjnych dotyczących pojedynczych klas. Oby uzyskać taki obiekt należy skorzystać z metody objectClass interfejsu Configuration. Przykładowo, aby włączyć kaskadowe usuwanie obiektów klasy Shape, należy, przed otwarciem połączenia z bazą danych, wykonać następującą instrukcję:

Db4o.configuration().objectClass(Shape.class).cascadeOnDelete(true);

Przy usuwaniu obiektów należy zwrócić szczególną uwagę na to, by żadne inne obiekty w bazie danych nie zawierały referencji na usuwane obiekty, gdyż db4o tego nie sprawdza (przynajmniej jest tak w wersji 5.2, dla której opracowano ćwiczenia), a zatem można łatwo doprowadzić do niespójności w bazie danych. Dodatkowym problemem występującym, przy włączonym automatycznym usuwaniu jest automatyczne usuwanie obiektów podczas aktualizacji, jeżeli aktualizowany obiekt stracił na nie referencje.

Dokumentacja podaje tutaj następujący przykład:

ObjectContainer con;Bar bar1 = new Bar();Bar bar2 = new Bar();foo.bar = bar1;con.set(foo); // do bazy danych zapisywane są obiekty foo i bar1foo.bar = bar2;con.set(foo); // do bazy danych zapisywany jest obiekt bar2, a usuwany jest obiekt bar1


Obiekt bar1 zostanie usunięty z bazy danych niezależnie od tego, czy inne obiekty posiadają referencje na niego, czy nie.


Przykładowy program pokazany na slajdzie włącza automatyczne usuwanie obiektów, na które referencje zapisano w obiektach klas Picture i Shape (1), Następnie odczytuje obiekt reprezentujący przykładowy rysunek i usuwa go z bazy danych (2). Ponieważ włączone jest automatyczne usuwanie obiektów, ta jedna instrukcja spowoduje usunięcie całego rysunku z bazy danych.


Kompletny kod programu, którego fragmenty pokazano na slajdzie załączono do kursu w postaci pliku: Skeleton-lab6.6.java



<< Poprzedni slajd | Spis treści | Następny slajd >>