Annotation JPA @Basic

1. Vue d'ensemble

Dans ce rapide didacticiel, nous explorerons l' annotation JPA @Basic . Nous discuterons également de la différence entre les annotations JPA @Basic et @Column .

2. Types de base

JPA prend en charge divers types de données Java en tant que champs persistants d'une entité, souvent appelés types de base.

Un type de base correspond directement à une colonne de la base de données. Ceux-ci incluent les primitives Java et leurs classes wrapper, String , java.math.BigInteger et java.math.BigDecimal , diverses classes date-heure disponibles, des énumérations et tout autre type implémentant java.io.Serializable .

Hibernate, comme tout autre fournisseur ORM, maintient un registre des types de base et l'utilise pour résoudre le org.hibernate.type.Type spécifique d'une colonne .

3. @Basic Annotation

Nous pouvons utiliser l' annotation @Basic pour marquer une propriété de type de base:

@Entity public class Course { @Basic @Id private int id; @Basic private String name; ... }

En d'autres termes, l' annotation @Basic sur un champ ou une propriété signifie qu'il s'agit d'un type de base et Hibernate doit utiliser le mappage standard pour sa persistance.

Notez qu'il s'agit d'une annotation facultative. Et ainsi, nous pouvons réécrire notre entité Course comme:

@Entity public class Course { @Id private int id; private String name; ... }

Lorsque nous ne spécifions pas l' annotation @Basic pour un attribut de type de base, elle est implicitement supposée et les valeurs par défaut de cette annotation s'appliquent.

4. Pourquoi utiliser l' annotation @Basic ?

L' annotation @Basic a deux attributs, optionnel et fetch . Regardons chacun de plus près.

L' attribut facultatif est un paramètre booléen qui définit si le champ ou la propriété marqué autorise null . La valeur par défaut est true . Ainsi, si le champ n'est pas de type primitif, la colonne sous-jacente est supposée être Nullable par défaut.

L' attribut fetch accepte un membre de l'énumération Fetch , qui spécifie si le champ ou la propriété marqué doit être chargé paresseusement ou rapidement récupéré. Il vaut par défaut FetchType.EAGER , mais nous pouvons autoriser le chargement différé en le définissant sur FetchType.LAZY.

Le chargement différé n'aura de sens que si nous avons un grand objet sérialisable mappé en tant que type de base, car dans ce cas, le coût d'accès au champ peut être important.

Nous avons un tutoriel détaillé couvrant le chargement Eager / Lazy dans Hibernate qui approfondit le sujet.

Maintenant, nous allons dire ne veulent pas permettre nulls pour notre cours de nom et que vous voulez charger paresseusement que la propriété ainsi. Ensuite, nous définirons notre entité Course comme:

@Entity public class Course { @Id private int id; @Basic(optional = false, fetch = FetchType.LAZY) private String name; ... }

Nous devons explicitement utiliser l' annotation @Basic lorsque vous souhaitez dévier des valeurs par défaut des paramètres optionnels et de récupération . Nous pouvons spécifier l'un ou les deux de ces attributs, en fonction de nos besoins.

5. JPA @Basic vs @Column

Regardons les différences entre les annotations @Basic et @Column :

  • Les attributs de l' annotation @Basic sont appliqués aux entités JPA, tandis que les attributs de @Column sont appliqués aux colonnes de la base de données
  • L' attribut facultatif de l'annotation @Basic définit si le champ d'entité peut être nul ou non; d'autre part, @Column d'annotation nullables spécifie l' attribut si la colonne de base de données correspondante peut être nulle
  • Nous pouvons utiliser @Basic pour indiquer qu'un champ doit être chargé paresseusement
  • L' annotation @Column nous permet de spécifier le nom de la colonne de la base de données mappée

6. Conclusion

Dans cet article, nous avons appris quand et comment utiliser l' annotation @Basic de JPA . Nous avons également expliqué en quoi il diffère de l' annotation @Column .

Comme d'habitude, des exemples de code sont disponibles à l'adresse over sur Github.