Veuillez expliquer: insertable = false, updatable = false

Si un champ est annoté insertable=false, updatable=false , cela ne signifie-t-il pas que vous ne pouvez pas insérer de valeur ni modifier la valeur existante? Pourquoi voudriez-vous faire ça?

 @Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToMany(mappedBy="person", cascade=CascadeType.ALL) private List
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; }

Vous feriez cela lorsque la responsabilité de créer / mettre à jour l’entité associée en question ne se trouve pas dans l’entité actuelle . Par exemple, vous avez une Person et une Address . Vous souhaitez append insertable=false, updatable=false à la relation @OneToMany avec l’entité Person dans l’entité Address , simplement parce que l’entité Address n’a pas la responsabilité de créer ou de mettre à jour une Person . C’est l’inverse.

Définir insertable=false, updatable=false est utile lorsque vous devez mapper un champ plusieurs fois dans une entité, généralement:

  • en utilisant une clé composite
  • en utilisant une clé primaire partagée
  • lors de l’utilisation de clés primaires en cascade

C’est IMO, non pas sémantique, mais certainement technique.

Je voudrais append aux réponses de BalusC et Pascal Thivent une autre utilisation courante de insertable=false, updatable=false :

Considérons une colonne qui n’est pas un identifiant mais un type de numéro de séquence . La responsabilité du calcul du numéro de séquence n’appartient pas nécessairement à l’application.

Par exemple, le numéro de séquence commence par 1000 et doit être incrémenté d’une unité pour chaque nouvelle entité. Cela se fait facilement, et de manière très appropriée, dans la firebase database et, dans ce cas, ces configurations ont un sens.

Un autre exemple serait sur la colonne “created_on” où vous voulez laisser la firebase database gérer la création de date