J'essaie de créer une table à partir d'annotations en veille prolongée. Il me faut une colonne de type Double, dont la longueur est spécifiée comme suit: (10,2) . La syntaxe SQL apparaît ainsi:
... DOUBLE(10,2) ....
J'ai essayé de faire ça:
@Column(length = 10, precision = 2) ...
mais quand je regarde ma table créée, il n'est pas spécifié la longueur pour Double colonne. Hibernate a-t-il une solution à cela ou est-il nécessaire de modifier manuellement la configuration de la table?
Merci!
L'élément length
de l'annotation de colonne s'applique uniquement si une colonne de valeur chaîne est utilisée . Dans votre cas, vous devez utiliser les éléments precision
et scale
.
@Column(precision=10, scale=2)
Voici ce que la spécification écrit à leur sujet:
int
-precision
- (Facultatif) Précision d'une colonne décimale (exacte numérique). (S'applique uniquement si une colonne Décimale est utilisée.)int
-scale
- (Facultatif) Échelle pour une décimale (nombre exact) colonne. (S'applique uniquement si une colonne décimale Est utilisée.)
@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")
Vous pouvez également utiliser @Digits
à partir de l'API du validateur hibernate qui implémente le standard de validation de bean javax.validation
@Digits(integer = 10 /*precision*/, fraction = 2 /*scale*/)
Des Javadocs
L'élément annoté doit être un nombre compris dans la plage acceptée. Pris en charge les types sont:
- BigDecimal
- BigInteger
- Séquence de caractères
- BigInteger
- octet, court, int, long, et leurs types d'emballage respectifs
les éléments nuls sont considérés comme valides
Utilisez @Type (uniquement dans Hibernate):
@Column(precision = 5, scale = 4)
@Type(type = "big_decimal")
private double similarity;
Cela donnera une définition (PostgreSQL, Oracle):
similarity numeric(5, 4),
similarity number(5, 4)