@Embeddable en @Embedded

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: