Ajoutant aux réponses précédentes, une utilisation courante de insertable=false, updatable=false
est de sauver des requêtes de base de données redondantes, améliorant ainsi les performances.
Imaginez avoir une classe Client, qui a une entité Parent. Si vous voulez simplement vérifier si un Client a un Parent, vous avez simplement besoin de vérifier la présence de la valeur dans sa colonne parent_id
. Il n'est pas nécessaire de demander à Hibernate de récupérer l'entité Parent, avec éventuellement toutes ses autres associations, entraînant un nombre supplémentaire de requêtes :
public class Client {
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private Parent parent;
@Column(name = "parent_id", insertable = false, updatable = false)
private UUID parentId;
}
Avec la configuration ci-dessus, le champ parentId
va simplement récupérer toute valeur stockée dans la colonne parent_id
, qui est uniquement éditée/mise à jour par l'entité Parent.