2

JUnit テストで Bean 検証を使用してエンティティを検証したいと考えています。セットアップは問題ないように見えますが、テストは失敗しません。したがって、エンティティが適切に検証されていないようです。

関連する JPA アノテーションは次のとおりです。

@Column(name = "mobile_numbers", table = STN)
private String smsRecipientMobileNumbers;

列のデフォルト サイズは 255 文字です (データベースに正しく適用されます)。

テストは次のとおりです。

  final Collection<String> recipients = new ArrayList<String>(2000);
  for (int i = 0; i < 2000; i++) {
    recipients.add("some mobile number");
  }
  objectUnderTest.setSmsRecipients(recipients);

  ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
  Validator validator = factory.getValidator();
  violations = validator.validate(objectUnderTest, Default.class);
  assertThat(violations, is(empty()));
}

smsRecipientMobileNumbers255文字をはるかに超えているため、失敗すると思いますが、合格します。

エンティティにサイズ制約を明示的に適用すると、テストは失敗します。

@Column(name = "mobile_numbers", table = STN)
@Size(max = 255)
private String smsRecipientMobileNumbers;

ここで何が間違っていますか?明らかに、選択したプロバイダーは JPA アノテーションを正しく解釈できる必要があります。バリデータは のインスタンスですorg.hibernate.validator.engine.ValidatorImpl

4

1 に答える 1

3

Bean Validation は、JPA エンティティ (またはデフォルトの列サイズ) を考慮しません。Bean Validation を使用して長さを検証する場合は、@Size制約を追加する必要があります。

JPA プロバイダーは、DDL ステートメントを作成するときにオプションで制約を考慮することができます。たとえば、Hibernate ORM は、列の長さを のmax属性に設定する必要があります@Size

于 2012-11-20T19:52:53.727 に答える