Training, Workshops, Softwareentwicklung

Hibernate Tutorial

Identity

Die meisten Datenbanken bieten eine Möglichkeit, die ID-Spalte vollautomatisch zu generieren. Hibernate nennt den dafür vorgesehenen Typ "Identity" Spalte. Bei h2 erzeugen wir das mit AUTO_INCREMENT:

CREATE TABLE CUSTOMER (
  ID        BIGINT AUTO_INCREMENT,
  FIRSTNAME VARCHAR(255),
  LASTNAME  VARCHAR(255)
);

ALTER TABLE CUSTOMER
  ADD CONSTRAINT CUSTOMER_PK PRIMARY KEY (ID);

Damit Hibernate diese Spalte richtig auswertet, benötigt es eine neue Annotation in der Entity:

@Entity
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) (1)
    private Long id;
1 @GeneratedValue legt fest, auf welche Art die ID erzeugt werden soll.

Generierte ID

Nun müssen wir die ID nicht mehr selbst festlegen:

doInHibernate(em -> {

    Customer customer = new Customer();

    customer.setFirstname("Buck");
    customer.setLastname("Rogers");


    withTransaction(em, () ->
            em.persist(customer)
    );
    assertNotNull(customer.getId()); (1)

    withTransaction(em, () ->
            em.remove(customer)
    );
});
1 Die Id-Property wurde automatisch initialisiert.
Diese Art IDs zu erzeugen, verhindert essentielle Optimierungen, die Hibernate im Batch-Modus vornehmen kann und ist daher nicht zu empfehlen, wenn man viele Zeilen auf einmal einfügen will.