Obiekty wbudowane w JPA
Obiekty wbudowane w JPA
Obiekty wbudowane stosuje się w przypadku rozbieżności modelu obiektowego i fizycznego modelu bazodanowego. Przykładowo z encją User jest związana encja Address. W modelu obiektowym byty te będą implementowane przez odrębne obiekty, jednak w relacyjnej bazie danych w celu osiągnięcia lepszej wydajności mogą być zaimplementowane przy użyciu jednej tabeli, zawierającej dane zarówno Użytkownika jak i jego Adres:
@Embeddable public class Address { private String city; private String postcode; } @Entity @Table (name = "person") public class Person { @Embedded @AttributeOverrides ({ @AttributeOverride (name = "city", column = @Column (name ="ma_city")), }) public Address getAddress () { return address ; } }
- Klasa obiektu wbudowanego musi być oznaczona adnotacją Embeddable. Nie oznacza sie jej jako encji, tym bardziej nie określa się dla niej tabeli w bazie danych ani identyfikatora.
- Pola klasy o typie oznaczonym jako wbudowywany opatruje się adnotacją Embedded. Nie jest to jednak niezbędne, gdyż specyfikacja JPA nakłada obowiązek na EntityManagera aby sam wybadał sprawę na podstawie adnotacji Embeddable.
- JPA umożliwia nadpisywanie atrybutów mapowania zdefniowanych w klasie wbudowywanej. W tym celu używa się adnotacji AttributeOverrides, która zawiera listę adnotacji AttributeOverride. I te dopiero służą do nadpisywania mapowania poszczególnych pól klasy.
Leave a comment