Может кто-нибудь объяснить мне, почему JPA поддерживает тип double
как тип поля, но bean константы проверки в javax.validation.constraints
(т.е. @Min/@Max) не поддерживают его?
Я знаю, что документация говорит, что это связано с ошибками округления, но если я выбираю тип поля как double
, я уже признаю, что меня не очень беспокоит явная точность.
Сценарий, с которым я столкнулся с этой дилеммой, следующий: у меня есть Сущность, представляющая точку на земной поверхности. Если точность находится в пределах нескольких сантиметров, это прекрасно. Это выглядит примерно так:
@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;
}
К сожалению, это не работает, потому что аннотации не поддерживают двойной тип. Но использование BigDecimal
вместо этого на самом деле не является вариантом, потому что у меня есть обширное вычисление с множеством точек, которые все еще должны быть достаточно быстрыми. Я работал над этим, определяя пользовательскую проверку ограничений, которая работает с double
s, но почему-то я думаю, что во всей истории мне что-то не хватает. Итак, что мне не хватает?