Proszę wyjaśnić: insertable = false, updatable = false
Jeśli pole jest adnotowane insertable=false, updatable=false
, czy nie oznacza to, że nie można wstawić wartości ani 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;
}
4 answers
Zrobiłbyś to, gdy odpowiedzialnośćza tworzenie/aktualizowanie powiązanego podmiotu nie jest w bieżącym podmiocie. Np. masz Person
i Address
. Chcesz dodać {[2] } do @OneToMany
relację z Person
encją w encji Address
, po prostu dlatego, że tworzenie lub aktualizacja Person
nie jest obowiązkiem Address
encji. Jest odwrotnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-24 10:52:06
Definiowanie insertable=false, updatable=false
jest przydatne, gdy trzeba odwzorować pole więcej niż raz w encji, zazwyczaj:
- przy użyciu klucza złożonego
- przy użyciu współdzielonego klucza głównego
- Podczas używania kaskadowych kluczy podstawowych
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-15 10:46:07
Chciałbym dodać do odpowiedzi BalusC i Pascal Thivent inne powszechne użycie insertable=false, updatable=false
:
Rozważ kolumnę, która nie jest id , ale jakimś rodzajem numeru sekwencji. Odpowiedzialność za obliczenie numeru porządkowego niekoniecznie musi należeć do wniosku.
Na przykład, numer sekwencji zaczyna się od 1000 i powinien być zwiększany o jeden dla każdej nowej jednostki. Jest to łatwe i bardzo odpowiednie, w bazie danych, i w takich przypadkach te konfiguracje mają sens.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-23 09:03:13
Innym przykładem może być kolumna "created_on", w której chcesz, aby baza danych zajmowała się tworzeniem daty
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-01 17:55:13