Wij kunnen tabellen uitbreiden met ingesloten objecten. Bijvoorbeeld een persoon heeft een adres als object. Echter willen we dit adres en de gegevens van de persoon in 1 tabel steken.
Dit gebeurt door het adres te annoteren met @Embeddable
, en vervolgens het object adres in de persoon klasse annoteren met @Embedded
. We geven een voorbeeld hieronder.
We beginnen met de klasse Address
:
@Embeddable public class Address { private String street; private String number; private String zipcode; private String city; private String country; // constructors, getters & setters }
Vervolgens de Person
klasse:
@Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String firstname; private String lastname; @Embedded private Address address = new Address(); private LocalDate dob; // constructors, getters & setters }
De databank ziet er dan als volgt uit:
De variabelen in de klasse Address
zijn annoteerbaar met @Column
om deze van kolomnaam te voorzien enz.
De gebruikte kolomnamen (en meer) van de klasse Address
zijn ook instelbaar in de klasse Person
door gebruik te maken van de annotatie @AttributeOverrides
en @AttributeOverride
. Een voorbeeld:
@Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String firstname; private String lastname; @Embedded @AttributeOverrides({ @AttributeOverride(name="street", column = @Column(name = "address_street")), @AttributeOverride(name="number", column = @Column(name = "address_number")), @AttributeOverride(name="zipcode", column = @Column(name = "address_zipcode")), @AttributeOverride(name="city", column = @Column(name = "address_city")), @AttributeOverride(name="country", column = @Column(name = "address_country")), }) private Address address = new Address(); private LocalDate dob; // constructors, getters & setters }
De databank ziet er dan als volgt uit: