128 votes

Persistance Java / JPA : @Column vs @Basic

Quelle est la différence entre @Column y @Basic annotations dans JPA ? Peuvent-elles être utilisées ensemble ? Devrait peuvent-ils être utilisés ensemble ? Ou l'un d'eux suffit-il ?

158voto

djna Points 34761
  • @Basic signifie qu'un attribut doit être conservé et qu'un mappage standard doit être utilisé. Il possède des paramètres qui vous permettent de spécifier si l'attribut doit être chargé paresseusement et s'il est nullable.

  • @Column vous permet de spécifier le nom de la colonne de la base de données vers laquelle l'attribut doit être persistant.

Si vous spécifiez l'un sans l'autre, vous obtiendrez un comportement par défaut, ce qui est raisonnable, et les gens n'en utilisent généralement qu'un seul, sauf dans des cas particuliers.

Donc si nous voulons un chargement paresseux d'un attribut et spécifier un nom de colonne, nous pouvons dire

 @Basic(fetch=FetchType.LAZY)
 @Column(name="WIBBLE")

Si nous avons besoin d'un comportement par défaut, non paresseux, alors il suffit d'utiliser l'option @Column aurait été suffisante.

3 votes

La réponse est claire. Merci. Je suppose donc que l'on peut utiliser @Basic sin @Column C'est pourquoi l optional y nullable Les propriétés existent dans les deux. Ai-je raison ?

1 votes

Je ne prétends pas comprendre entièrement la spécification JPA sur les différences entre le nullable de @Basic et le nullable de @Column et l'effet de spécifier aucun, l'un ou l'autre ou les deux. L'option @Basic nullable est décrite comme une "indication" relative à la génération de schémas. @Column nullable est décrit comme définissant les caractéristiques de la colonne dans la base de données. Ma pratique serait d'utiliser le cas @Column.

19 votes

@Basic(optional) est (devrait être) vérifié au moment de l'exécution par le fournisseur de persistance avant l'enregistrement dans la base de données. @Column est une définition de colonne dans la base de données et est utilisée pour la génération du schéma : stackoverflow.com/questions/2899073/

56voto

Hosam Aly Points 14797

En plus de La réponse de @djna il est intéressant de noter que @Basic doit être comparé à @OneToMany , @ManyToOne y @ManyToMany . Un seul de ces éléments peut être spécifié sur une propriété.

@Column y @JoinColumn peut être spécifié avec l'un de ces éléments pour décrire les propriétés de la colonne de la base de données.

Il s'agit de deux ensembles d'annotations qui peuvent être utilisés ensemble, mais une seule annotation de chaque ensemble peut être utilisée à la fois.

24voto

Gab Points 1979

Il convient de noter que le Basic est conçu pour des champs primitifs

http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes

Un attribut de base est un attribut dont la classe 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 mise en œuvre de JPA et de la plate-forme de base de données. Tout attribut de base utilisant un type qui ne correspond pas directement à un type de base de données peut être sérialisé vers un type de base de données binaire.

La façon la 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 qui ne font pas référence à d'autres entités seront automatiquement mappés comme basic, et même sérialisés s'ils ne sont pas de type basic. Le nom de la colonne pour l'attribut sera par défaut, nommé de la même manière que le nom de l'attribut, en majuscule.

2 votes

Non, si aucune annotation de colonne n'est spécifiée, les valeurs par défaut s'appliquent (le nom sera celui de l'attribut).

2voto

Sonu patel Points 69

L'annotation @Basic est appliquée aux entités JPA, et l'annotation @Column est appliquée aux colonnes de la base de données. L'attribut facultatif de l'annotation @Basic définit si le champ de l'entité peut être nul ou non ; d'autre part,

  • L'attribut nullable de l'annotation @Column indique 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.
  • L'annotation @Basic indique que la propriété n'est pas facultative au niveau de l'objet Java. Et (nullable = false) sur le mappage de colonne, est uniquement responsable de la génération d'une contrainte de base de données NOT NULL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X