w ,

FajneFajne

Hibernate #6 – najprzydatniejsze adnotacje przy modelowaniu klas encji

hibernate
hibernate

Przy modelowaniu klasy encji należy pamiętać, że konwencje nazewnicze pomiędzy klasami w Java a tabelami w bazach danych są rozbieżne. W tym artykule przedstawię 3 adnotacje, które umożliwią zachowanie prawidłowego nazewnictwa.

@Table

Adnotacja @Table pozwala na zmianę nazwy odwzorowanej tabeli. Domyślnie nazwa jest taka sama jak nazwa klasy. W Java dobrą praktyką jest zapisywanie nazwy klasy w licznie pojedynczej z wielkiej litery. Natomiast w bazie danych tabele zapisuje się małymi znakami w liczbie mnogiej. Aby było to możliwe wykorzystujemy adnotacje @Table.

@Entity
@Table(name = "books")
public class Book {

}

@Column

Analogicznie do @Table działa adnotacja @Column – jednak tyczy się ona kolumn. Konwencją w Java jest tworzenie nazw zmiennych zapisywanych notacją camelCase. W bazie danych nazwy zmiennych wielowyrazowe rozdzielane są znakiem podkreślnika/podłogi -> „_”.

@Entity
@Table(name = "books")
public class Book {
    @Column(name = "publish_date")
    private LocalDate publishDate;
}

@Enumerated

Domyślnie typ enum jest zapisywany w bazie danych w postaci liczbowej – według kolejności wartości zapisanej w tym typie. Adnotacja @Enumerated pozwala tym sterować. Możemy wówczas ustawić, że wartości będą zapisywane w postaci ciągu tekstowego.

@Entity
@Table(name = "books")
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String author;
    @Column(name = "publish_date")
    private LocalDate publishDate;

    @Enumerated(EnumType.ORDINAL) // default
    private BookType bookType;

    // geters + setters
}

Mapowanie wartości enum z wykorzystaniem adnotacji @Enumerated(EnumType.STRING)

Mapowanie wartości enum z wykorzystaniem adnotacji @Enumerated(EnumType.ORDINAL)

Oczywiście trzeba poważnie rozważyć czy stosowanie typu enum w postaci łańcucha znaków w bazie danych ma sens. Wszystko zależy od potrzeb systemu. Trzeba pamiętać, że zapisywanie tekstowej wartości typu wyliczeniowego do kolumny zamiast liczby wiąże się ze znacznie zwiększona ilością wykorzystywanej przestrzeni dyskowej przez bazę danych. Zwłaszcza jeśli mamy w tabeli dużo rekordów.

Napisane przez Przemysław Bykowski

Aktywny programista i energiczny trener. Specjalizuje się w Spring Boot i uczę go w ramach AkademiaSpring.pl. Po godzinach udzielam się na YouTubach. Więcej o mnie.

Dodaj komentarz

Spring Boot

Spring Boot #27 – Przetwarzanie danych z usługi REST bez modelu w kodzie

Firebase + Java – nasłuchiwanie zdarzeń w bazie danych