Qualcuno potrebbe spiegarmi perché l'JPA supporta il tipo double
come tipo di campo, ma i valori di convalida del bean in javax.validation.constraints
(ad esempio @Min/@Max) non lo supportano? So che la documentazione dice che questo è dovuto a errori di arrotondamento, ma se scelgo il tipo di campo da double
, ammetto che non mi interessa molto della precisione esplicita.Perché i limiti Min/Max di convalida del bean non supportano il doppio tipo?
Lo scenario in cui mi sono imbattuto in questo dilemma è il seguente: Ho un'entità che rappresenta un punto sulla superficie terrestre. Se la precisione è di pochi centimetri, va bene. Assomiglia a questo:
@Entity
public class Point {
/**
* The longitude in radians.
*/
@Min(-Math.Pi)
@Max(Math.Pi)
double longitude;
/**
* The latitude in radians.
*/
@Min(-Math.Pi/2)
@Max(Math.Pi/2)
double latitude;
}
Sfortunatamente questo non funziona, perché le annotazioni non supportano il tipo doppio. Ma usare BigDecimal
invece non è davvero un'opzione, perché ho un ampio calcolo con più punti in corso che deve essere abbastanza veloce. Ci ho lavorato attorno definendo un controllo dei vincoli personalizzati che funziona con double
s, ma in qualche modo penso che ci sia qualcosa che mi manca nell'intera storia. Quindi, cosa mi sto perdendo?
Si prega di notare che l'APP e Bean Validation sono due API completamente separate. Ho corretto il titolo, alcune parole e tag di conseguenza. Esempio di domande brillanti btw. Quale implementazione di Bean Validation stai usando? Hibernate Validator? – BalusC
Sì, ora sto usando Hibernate Validator. –
È possibile annotare un doppio con Min o Max (almeno in Hibernate Validator). Il doppio tipo è supportato. Il tuo problema sembra essere che non puoi specificare un doppio come parametro di vincolo. Lì le specifiche effettivamente impongono un lungo. Hai preso in considerazione l'utilizzo di DecimalMin e DecimalMax? È possibile specificare i valori minimo e massimo come stringhe. – Hardy