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