Просто столкнулся с ошибкой, где проблема была, что я имел:@NotNull ограничение для примитивов, почему?
@Column(name = "ACTIVE")
@NotNull
private boolean active;
В моем коде я забыл установить значение, но она по-прежнему «работает», как по умолчанию логического значения ложно. Теперь я изменил его на Boolean
, чтобы он не прошел проверку, если он не активно установлен.
Почему я могу иметь @NotNull
ограничения на вещи, которые, очевидно, не могут быть null
? Является ли это рефакторингом, поэтому, если я перехожу к Boolean, как я это сделал сейчас, я все еще сохраняю предполагаемое ограничение?
Есть ли какие-либо хорошие идеи, чтобы уловить эти проблемы (кроме большего количества тестов для этой цели)? Или я должен держаться подальше от использования примитивов?
Поскольку создание базы данных из схемы, объявленной аннотациями, должно знать, что столбец будет не нулевым. Позже вы можете перейти от 'boolean' к любому типу, который boolean может преобразовать в и является нулевым (не только логическим, но и интегральным, например Short/Integer/и т. Д.). Например, mysql выделяет и весь 'tinyint' (' int8_t') для bool. –
JavaDoc 'javax.validation.constraints.NotNull' явно заявляет, что он принимает любой тип, и не имеет большого смысла не делать этого. Единственная цель этой аннотации - проверить, не является ли аннотированная переменная не нулевой. Проверка того, разрешает ли тип «null» или нет, уже не приведет к принципу единой ответственности. – Tom
@AdrianColomitchi, спасибо, я думаю, что это очень актуальная точка. Я лично не использую эту функцию, но могу понять, почему это важно. –