web-dev-qa-db-fra.com

Comment spécifier la double précision en veille prolongée?

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!

28
artaxerxe

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.)

Références

  • Spécifications JPA 1.0
    • Section 9.1.5 "Annotation de colonne"
67
Pascal Thivent
@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")

Définition des valeurs par défaut des colonnes dans JPA

14
Kris

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

2
FearlessHyena

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)
0
zeratul021