Quelles sont les propriétés n' @Colonne columnDefinition rendre redondants?
J'ai souvent de spécifier mes @Column
annotations comme ceci:
@Column(columnDefinition="character varying (100) not null",length=100,nullable=false)
Comme vous pouvez le voir je précise length
et nullable
même si le columnDefinition
précise déjà ces. C'est parce que je ne sais pas où/quand ces valeurs sont utilisées exactement.
Ainsi, lors de la spécification de columnDefinition
, quelles sont les autres propriétés de @Column
sont licenciés?
Si c'est important, j'utilise Hibernate et PostgreSQL
- si vous allez spécifier la colonne exacte sera créé dans votre base de données, autrement, il sera créé par défaut par base de données
- Je dois ajouter que je ne l'utilise plus cette propriété, et préfère faire mon propre DDL.
Vous devez vous connecter pour publier un commentaire.
Ma Réponse: Tous les éléments suivants doivent être remplacées (à savoir les décrire tous dans
columndefinition
, le cas échéant):length
precision
scale
nullable
unique
c'est à dire la colonne DDL sera composé de:
name
+columndefinition
et rien d'autre.Justification suit.
Annotation contenant le mot "Colonne" ou "Table" est purement physiques - propriétés seulement utilisé pour contrôler DDL/DML contre la base de données.
Autres annotation purement logique - propriétés utilisées dans la mémoire en java pour contrôler JPA traitement.
C'est pourquoi, parfois, il semble que l'optionalité/possibilité de valeur null est définie deux fois - une fois par
@Basic(...,optional=true)
et une fois par@Column(...,nullable=true)
. L'ancien dit de l'attribut/association peut être null dans la JPA modèle d'objet (en mémoire), flush (); ci dit DB colonne peut être null. Habituellement, vous voulez mettre de la même mais pas toujours, en fonction de la DB tables de configuration et réutilisés.Dans votre exemple, la longueur et la nullable propriétés sont remplacées et redondant.
En JPA Spec & javadoc:
columnDefinition
définition:SQL fragment qui est utilisé lors de la génération du DDL pour la colonne.
columnDefinition
par défaut:SQL généré pour créer une colonne de type inféré.
Les exemples suivants sont fournis:
Et, euh..., c'est vraiment. :-$ ?!
Ne columnDefinition l'emporter sur d'autres propriétés fournies dans la même annotation?
La javadoc et JPA spec n'est pas explicitement cette adresse - spec n'est pas de donner une grande protection. Pour être sûr à 100%, test avec votre choix de mise en œuvre.
Suivantes peuvent être en toute sécurité de manière implicite à partir des exemples fournis dans la JPA spec
name
&table
peut être utilisé en conjonction aveccolumnDefinition
, ni sont remplacésnullable
est substituée/licenciés parcolumnDefinition
Suivantes peuvent être assez en toute sécurité implicite de la "logique de la situation" (ce que je viens de dire?? 😛 ):
length
,precision
,scale
sont remplacées/licenciés par lecolumnDefinition
- elles font partie intégrante du typeinsertable
etupdateable
sont fournis séparément et jamais inclus danscolumnDefinition
, car ils contrôlent la génération SQL dans la mémoire, avant de emmitted à la base de données.Qui laisse juste le "
unique
de la propriété". Il est similaire à la nullable - étend ou se qualifie à la définition de type, doit donc être traitée partie intégrante de la définition de type. c'est à dire doit être remplacée.Test De Ma Réponse
Pour les colonnes "A" & "B", respectivement:
columnDefinition remplacera le sql DDL générées par hibernate pour cette colonne, il est non portable et dépend de la base de données que vous utilisez. Vous pouvez l'utiliser pour spécifier les valeurs null, la longueur, la précision, échelle... ect.
length
,nullable
, etc.) sont normalement utilisés?javax.persistence.Column
, propriétés:unique
,nullable
,columnDefinition
,length
,precision
,scale
ne sont utilisés que pour DDL génération, propriétés:name
,table
sont utilisés pour spécifier le mappage des colonnes, et les propriétés:insertable
,updatable
sont utilisés pour spécifier si la colonne est inclus dans SQL INSERT/UPDATE généré par le fournisseur de persistance.