Ну, вы можете поймать это :) Вот пример (из модульного теста):
public class CustomerTest {
private static EntityManagerFactory emf;
private EntityManager em;
@BeforeClass
public static void createEntityManagerFactory() {
emf = Persistence.createEntityManagerFactory("MyPu");
}
@AfterClass
public static void closeEntityManagerFactory() {
emf.close();
}
@Before
public void beginTransaction() {
em = emf.createEntityManager();
em.getTransaction().begin();
}
@After
public void rollbackTransaction() {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
if (em.isOpen()) {
em.close();
}
}
@Test
public void nameTooShort() {
try {
Customer customer = new Customer("Bo");
em.persist(customer);
em.flush();
fail("Expected ConstraintViolationException wasn't thrown.");
} catch (ConstraintViolationException e) {
assertEquals(1, e.getConstraintViolations().size());
ConstraintViolation<?> violation = e.getConstraintViolations().iterator().next();
assertEquals("name", violation.getPropertyPath().toString());
assertEquals(Size.class, violation.getConstraintDescriptor().getAnnotation().annotationType());
}
}
}
Где мой клиент выглядит:
@Entity
public class Customer {
@Id @GeneratedValue
@NotNull
private Long id;
@NotNull
@Size(min = 3, max = 80)
private String name;
private boolean archived;
...
}
Но это был всего лишь пример, демонстрирующий крошечную часть API.
По моему мнению, вы должны обработать проверку на уровне представления. Многие платформы представления поддерживают проверку бинов: JSF 2.0, Wicket, Spring MVC ...
Смотри также