Вы можете попробовать это
Примечание: это не проверено
SELECT *
FROM (
SELECT
P.LegacyKey AS LegacyKey,
D.DesignNumber AS DesignNumber,
COUNT([P].[LegacyKey]) AS cnt
FROM tbl1 AS [SO]
GROUP BY D.DesignNumber,P.LegacyKey
HAVING COUNT([P].[LegacyKey]) = 1
) a
WHERE COUNT() OVER (PARTITION BY LegacyKey) = 1
Это для проверки.
Валидация модель после привязки к ней пользовательского ввода. Spring 3 обеспечивает поддержку декларативная проверка с помощью JSR-303. Эта поддержка включается автоматически если поставщик JSR-303, например Спящий валидатор присутствует на ваш путь к классам. При включении вы можете инициировать проверку, просто аннотирование метода контроллера параметр с аннотацией @Valid: После привязки входящего POST параметры, форма AppointmentForm будет пройти валидацию; в этом случае для проверки значение поля даты не равно нулю и произойдет в будущем.
Дополнительную информацию см. здесь:
http://blog.springsource.com/2009/11/17/spring-3-type-conversion-and-validation/
Добавляя ответы выше, взгляните на следующее. Столбец AppointmentForm
date
аннотирован парой аннотаций. Имея аннотацию @Valid
, которая запускает проверки на AppointmentForm
(в данном случае @NotNull
и @Future
). Эти аннотации могут исходить от разных провайдеров JSR-303 (например, Hibernate, Spring ... и т. Д.).
@RequestMapping(value = "/appointments", method = RequestMethod.POST)
public String add(@Valid AppointmentForm form, BindingResult result) {
....
}
static class AppointmentForm {
@NotNull @Future
private Date date;
}
@Valid
само по себе не имеет ничего общего с весной. Это часть спецификации Bean Validation (есть несколько из них, последняя из которых - JSR 380 на второе полугодие 2017 года), но @Valid
очень старая и полностью основана на JSR 303.
Как мы все знаем, Spring очень хорош в обеспечении интеграции со всеми различными JSR и библиотеками Java в целом (например, JPA, JTA, Caching и т. Д.), И, конечно, эти ребята также позаботились о проверке. Одним из ключевых компонентов, способствующих этому, является MethodValidationPostProcessor .
Попытка ответить на ваш вопрос - @Valid
очень удобен для так называемого каскадного валидации, когда вы хотите проверить сложный граф, а не только элементы верхнего уровня объекта. Каждый раз, когда вы хотите пойти глубже, вы должны использовать @Valid
. Это то, что диктует JSR. Spring выполнит это с некоторыми незначительными отклонениями (например, я попытался поместить @Validated
вместо @Valid
в метод RestController и проверки работоспособности, но то же самое не будет применяться к обычным «служебным» компонентам).
Просто добавив к вышеупомянутому ответу, В веб-приложении @valid
используется, где проверяемый компонент также аннотирован аннотациями проверки, например, @NotNull
, @Email
(спящая аннотация), поэтому, когда при получении ввода от пользователя значения могут быть проверены, и результат привязки будет иметь результаты проверки. bindingResult.hasErrors()
сообщит, не прошла ли проверка.
IIRC @Valid — это не аннотация Spring, а аннотация JSR-303 (которая является стандартом проверки компонентов). Что он делает, так это в основном проверяет, являются ли данные, которые вы отправляете методу, действительными или нет (он проверит scriptFile для вас).