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

Your email address will not be published.


*