¿Podría alguien explicarme por qué el JPA admite el tipo double
como un tipo de campo, pero los constantes de validación del bean en javax.validation.constraints
(es decir, @Min/@Max) no lo admiten? Sé que la documentación dice que esto se debe a errores de redondeo, pero si elijo el tipo de campo para ser double
, ya admito que no me importa demasiado la precisión explícita.¿Por qué la validación de beans Las restricciones mínimas/máximas no admiten el tipo doble?
El escenario me encontré con este dilema es el siguiente: Tengo una entidad que representa un punto de la superficie de la Tierra. Si la precisión está dentro de unos pocos centímetros, está bien. Se ve algo como esto:
@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;
}
Desafortunadamente esto no funciona, debido a que las anotaciones no son compatibles con el tipo doble. Pero el uso de BigDecimal
en cambio no es realmente una opción, porque tengo un cálculo extenso con múltiples puntos que aún deben ser razonablemente rápidos. Lo resolví definiendo una verificación de restricción personalizada que funciona con double
s, pero de alguna manera creo que hay algo que me falta en toda la historia. Entonces, ¿qué me estoy perdiendo?
Tenga en cuenta que la APP y Bean Validation son dos APIs totalmente independientes. Arreglé el título, algunas palabras y etiquetas en consecuencia. Brillante ejemplo de pregunta por cierto. ¿Qué implementación de Validación Bean está usando? Validador de Hibernate? – BalusC
Sí, en este momento estoy usando Hibernate Validator. –
Puede anotar un doble con Mín. O Máx. (Al menos en Hibernate Validator). El tipo doble es compatible. Su problema parece ser que no puede especificar un doble como parámetro de restricción. Allí la especificación de hecho hace cumplir un largo. ¿Has considerado usar DecimalMin y DecimalMax? Puede especificar sus valores mínimo y máximo como cadenas. – Hardy