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.