Tworzenie prostej encji
Aby obiekt stała się obiektem encyjnym potrzebujemy opatrzyć go adnotacją @Entity oraz zadeklarować klucz główny, czyli adnotacja @Id przy deklaracji pola lub przy metodzie get. Ja w moim kodzie wszystkie adnotacje związane z polami (ustalenie klucza głównego, relacje, dodatkowe zależności) będę umieszczał przy deklaracji pól, natomiast warto pamiętać że możemy używać ich również przy metodach get. Jeśli jednak zdecydujemy się umieścić adnotacje @Id przy polu, to konsekwentnie musimy trzymać się tego stylu do końca. W praktyce wygląda to tak.
package pl.mkorwel.exam.entities;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Osoba {
@Id
private long pole1;
private String pole2;
public long getPole1() {
return this.pole1;
}
public String getPole2() {
return this.pole2;
}
public void setPole1(final long pole1) {
this.pole1 = pole1;
}
public void setPole2(final String pole2) {
this.pole2 = pole2;
}
}
Nasza encja nazywa się Osoba i zawiera dwa pole, pole1 jest kluczem głównym o typie numerycznym, a pole2 jest polem tekstowym. Obiekt encyjny zadeklarowany w ten sposób reprezentuje tabelę OSOBA z bazy danych z dwoma pola, POLE1 które jest kluczem głównym o typie numerycznych (BIGINT) oraz z polem POLE2 które jest zwykłym polem tekstowym VARCHAR(255).Nazwy tabel i kolumn
Zadeklarowani encji bez wykorzystywania adnotacji @Table, @Column sprawi że nazwa klasy odpowiada nazwie tabeli, a nazwy pól odpowiadają nazwie kolumn w bazie danych. Jeśli jednak z jakiegoś powodu chcemy aby nasza encja miała inne nazewnictwo (lub innego powodu) niż tabela jaką reprezentuje jesteśmy zmuszeni dodać do klasy adnotację @Table, a do pól adnotację @Column.
package pl.mkorwel.exam.entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "OSOBA_TABLE")
public class Osoba {
@Id
@Column(name = "POLE_1", nullable = false)
private long pole1;
@Column(name = "POLE_2", length = 100)
private String pole2;
public long getPole1() {
return this.pole1;
}
public String getPole2() {
return this.pole2;
}
public void setPole1(final long pole1) {
this.pole1 = pole1;
}
public void setPole2(final String pole2) {
this.pole2 = pole2;
}
}
Adnotacje @Table i @Column posiadają szereg atrybutów, dzięki którym możemy doprecyzować jak nasza tabela ma być odwzorowana w bazie danych.@Table
- name określa nazwę tabeli
- catalog określa katalog w jakim znajduje się tabela
- schema określa schemę w jakim znajduje się tabela
- uniqueConstraints umożliwia definiowane kodu DDL
@Column
- name nazwa kolumny
- uniwue czy kolumna ma być unikalna
- nullable czy wartość kolumny jest wymaga
- insertable czy kolumna ma być brana pod uwagę podczas zapisu
- updateable czy kolumna ma być brana pod uwagę podczas aktualizacji
- uniqueConstraints umożliwia definiowane kodu DDL
- length określa długość kolumny typu VARCHAR
- table nazwa tabeli w jakiej znajduję się pole
- precision dla kolumn o typie numerycznym, ustalamy ilość liczb po lewej stronie przecinka
- scale dla kolumn o typie numerycznych, ustalamy ilość liczb po prawej stronie przecinka
Klczy główny
Ostatnim podstawowym zagadnieniem związanym z deklaracją encji jest klucz główny. Jak już wiemy każda encja musi mieć taki klucz, a pole które nim jest posiada adnotacje @Id. Klucz główny możemy oczywiście wpisywać ręcznie, ale istnieje też możliwość automatycznego generowania. Aby tego dokonać wystarczy umieścić adnotację @GeneratedValue.
package pl.mkorwel.exam.entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "OSOBA_TABLE")
public class Osoba {
@Id
@GeneratedValue
@Column(name = "POLE_1", nullable = false)
private long pole1;
@Column(name = "POLE_2", length = 100)
private String pole2;
public long getPole1() {
return this.pole1;
}
public String getPole2() {
return this.pole2;
}
public void setPole1(final long pole1) {
this.pole1 = pole1;
}
public void setPole2(final String pole2) {
this.pole2 = pole2;
}
}
Niektóre bazy danych oferują mechanizm sekwencyjnego generowania identyfikatorów, co powoduje ze musimy wskazać odpowiednią sekwencję, której będziemy używać do generowania. W takim celu musimy jeszcze umieścić adnotację @SequenceGenerator.
package pl.mkorwel.exam.entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "OSOBA_TABLE")
public class Osoba {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "OSOBA_SEQ")
@SequenceGenerator(name = "OSOBA_SEQ", sequenceName = "OSOBA_SEQ_W_BAZIE")
@Column(name = "POLE_1", nullable = false)
private long pole1;
@Column(name = "POLE_2", length = 100)
private String pole2;
public long getPole1() {
return this.pole1;
}
public String getPole2() {
return this.pole2;
}
public void setPole1(final long pole1) {
this.pole1 = pole1;
}
public void setPole2(final String pole2) {
this.pole2 = pole2;
}
}
W adnotacji @SequenceGenerator za pomocą atrybutu name nadajemy nazwę dla naszej sekwencji, a atrybutem sequenceName wskazujemy tabelę sekwencji w bazie danych. Następnie W adnotacji @GeneratedValue ustawiamy strategię generowania (atrybut strategy) na GenerationType.SEQUENCE i przy pomocy atrybutu generator wskazujemy która sekwencja ma zostać użyta.
Brak komentarzy:
Prześlij komentarz