Они оба проверяют время выполнения. Хотя есть некоторая разница
Состояния спецификации JPA @Basic(optional = false)
можно использовать в качестве подсказки схемы, т. Е. Если вы обновляете схему своей базы данных с помощью JPA (как правило, это не очень хорошая практика), вы можете использовать ее, чтобы указать, что значение этого столбца не может быть нулевым и должно иметь значение.
Раздел 9.1.18 Основная аннотация спецификации JPA1
и
Раздел 11.1.6 Основная аннотация спецификации JPA2
Четко указать, что.
Кроме того, оба будут выполнять проверку во время выполнения другими словами перед отправкой sql в базу данных.
Как правило, для проверки перед отправкой SQL на сервер, если вы используете JSR 303, который также включает в себя множество других проверок, вы будете использовать @NotNull
, однако вы можете не использовать JSR 303, и в этом случае вы можете использовать @Basic(optional = false)
, который даже вышел до JSR 303, однако, не является предпочтительным по сравнению с JSR303.
Возможно, вы захотите узнать, что @Column(nullable = false)
используется исключительно на стороне базы данных.
Если вы когда-либо используете оба - да, только если вы разрешаете JPA обновлять схему, в противном случае JSR-303 предпочтительнее другого.