Proszę wyjaśnić o insertable = false i updatable = false w odniesieniu do adnotacji JPA @Column


Jeśli pole ma adnotację
insertable = false, updatable = false
, czy nie oznacza to, że nie możesz wstawić wartości lub zmienić istniejącej wartości? Dlaczego chcesz to zrobić?
@Entity
public class Person { @Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id; @OneToMany(mappedBy="person", cascade=CascadeType.ALL)
private List<Address> addresses;
}@Entity
public class Address { @Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id; @ManyToOne
@JoinColumn(name="ADDRESS_FK")
@Column(insertable=false, updatable=false)
private Person person;
}

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zrobiłbyś to, gdyby

odpowiedzialność

za utworzenie/aktualizację odpowiedniego podmiotu nie spoczywało

obecny

podmioty. Na przykład. masz
Person
i
Address
. Chcesz dodać
insertable = false, updatable = false
do relacji
@OneToMany
z jednostką
Person
w encji
Address
tylko dlatego, że encja
Address
nie jest odpowiedzialna za tworzenie lub aktualizowanie
Person
. Przeciwieństwo jest prawdą.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Definicja
insertable = false, updatable = false
jest przydatna, gdy musisz zmapować pole więcej niż raz w encji, zazwyczaj:

To IMO nie jest kwestią semantyczną, ale zdecydowanie techniczną.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Chciałbym dodać do odpowiedzi

BalusC

i

Pascal Thivent

inne częste użycie
insertable = false, updatable = false
:
Rozważ kolumnę, która nie jest

identyfikator

ale trochę

numer seryjny
... Odpowiedzialność za obliczenie numeru kolejnego nie musi spoczywać na aplikacji.
Na przykład numer kolejny zaczyna się od 1000 i musi wzrastać o jeden dla każdego nowego obiektu. Jest to łatwe i bardzo poprawne w bazie danych iw takich przypadkach te konfiguracje mają sens.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Innym przykładem jest kolumna „created_on”, w której baza danych ma obsługiwać datę utworzenia

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się