2016-10-21 5 views
1

그냥 문제가 내가 가진 것이 었습니다 버그를 발견했습니다. 나는 이제 그것을 Boolean으로 변경하여 유효하게 설정되지 않은 경우 유효성 검사에 실패합니다.@NotNull 프리미티브에 대한 제약 조건, 이유는 무엇입니까? 내가 값을 설정하는 것을 잊었다했지만 부울의 기본이 거짓으로 여전히 "일"내 코드에서</p> <pre><code>@Column(name = "ACTIVE") @NotNull private boolean active; </code></pre> <p>:

@NotNull은 분명히 null 일 수없는 것들에 대한 제약이 있습니까? 그것은 리팩토링 이유입니까, 그래서 내가 지금 한 것처럼 부울로 변경하면, 나는 여전히 의도 된 제약 조건을 유지합니까?

좋은 아이디어가 있습니까? (이 목적을 위해 더 많은 테스트 제외) 아니면 원시 코드를 사용하지 말아야합니까?

+2

주석으로 선언 된 스키마에서 데이터베이스를 만들려면 열이 null이 아니어야합니다. 나중에 'boolean'에서 부울이 변환 할 수있는 모든 유형으로 전환 할 수 있으며, 부울뿐 아니라 Short/Integer/등의 정수도 사용할 수 있습니다. 예를 들어, mysql은 bool을위한 전체 'tinyint' ('int8_t')를 할당합니다. –

+1

'javax.validation.constraints.NotNull'의 JavaDoc은 모든 타입을 받아들이지 않는다고 명시 적으로 말합니다. 그렇게하지 않으면 의미가 없습니다. 이 주석의 유일한 목적은 주석 변수가 null이 아닌지 확인하는 것입니다. 유형이 'null'을 허용하는지 여부를 확인하는 것은 이미 단일 책임 원칙을 위반하게됩니다. – Tom

+0

@AdrianColomitchi, 감사합니다. 저는 이것이 매우 유효한 지적이라고 생각합니다. 나는 개인적으로 그 functionallity를 사용하지 않지만 그것이 왜 중요한지 알 수 있습니다. –

답변

1

javadoc입니다. 주석이 달린 요소는 null이 아니어야합니다. 모든 유형을 허용합니다.

그것은 그것이 null 여부를 수락할지 여부와는 아무 상관이없는, 변수가 not null 여부 그냥 확인 어떤 유형이 될 수 있습니다.

언급 한대로 METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER에 해당됩니다.

@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER}) 
+0

나는 그것을 이해한다. 나의 질문은 왜 프리미엄에 허용 되었는가? –

+0

나는 공식 문서를 찾을 수는 없지만 [this] (http://stackoverflow.com/questions/1458535/which-types-can-be-used-for)를 통과 할 수 있었던 특별한 이유를 모르겠습니다. -java-annotation-members) (전적으로 관련이 없지만) –