Quelle est la différence entre @Column
et @Basic
annotations dans JPA? Peuvent-ils être utilisés ensemble? Faut-il ils doivent être utilisés ensemble? Ou l'un d'eux suffit-il?
@Basic
signifie qu'un attribut doit être conservé et qu'un mappage standard doit être utilisé. Il a des paramètres qui vous permettent de spécifier si l'attribut doit être chargé paresseux et s'il est nullable.
@Column
vous permet de spécifier le nom de la colonne de la base de données dans laquelle l'attribut doit être conservé.
Si vous en spécifiez un sans l'autre, vous obtiendrez un comportement par défaut, ce qui est judicieux. Par conséquent, les utilisateurs n'en utilisent généralement qu'un, à l'exception des cas particuliers.
Donc, si nous voulions charger un attribut paresseux et spécifier un nom de colonne, nous pouvons dire
@Basic(fetch=FetchType.LAZY)
@Column(name="WIBBLE")
Si nous avons besoin du comportement par défaut, non paresseux, alors juste le @Column
aurait suffi.
En plus de réponse de @ djna , il est à noter que @Basic
devrait être comparé à @OneToMany
, @ManyToOne
et @ManyToMany
. Un seul de ceux-ci peut être spécifié sur une propriété.
@Column
et @JoinColumn
peut être spécifié avec n'importe lequel de ces éléments pour décrire les propriétés de colonne de la base de données.
Ce sont deux jeux d'annotations qui peuvent être utilisés ensemble, mais une seule annotation de chaque jeu peut être utilisée à la fois.
Il est à noter que Basic est conçu pour les champs primitifs.
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes
Un attribut de base est un attribut dans lequel la classe d'attribut est un type simple tel que String, Number, Date ou une primitive. La valeur d'un attribut de base peut correspondre directement à la valeur de la colonne dans la base de données.
Les types et les conversions pris en charge dépendent de la plate-forme d'implémentation et de la base de données JPA. Tout attribut de base utilisant un type qui ne correspond pas directement à un type de base de données peut être sérialisé en un type de base de données binaire.
Le moyen le plus simple de mapper un attribut de base dans JPA est de ne rien faire. Tous les attributs qui n'ont pas d'autres annotations et ne font pas référence à d'autres entités seront automatiquement mappés en tant que base, et même sérialisés si ce n'est pas un type de base. Le nom de colonne de l'attribut sera défini par défaut, le même nom que le nom de l'attribut, en majuscule.