0

在测试中,我尝试捕获异常:

在这里,我期望该软件没有标题-因此我期望在保存该实体时会引发 PersistenceException。

@Test
public void saveWithoutTitle() {

    Software software = ...

    try {
        software.save();
        fail("software.title should not be null");
    } catch (PersistenceException ex) {}
}

我的测试失败(即异常永远不会发生)

我的带有@Column(nullable = false ! )的软件实体类:

@Entity
public class Software extends Model {

    @Column(nullable = false)
    public String title;

我做错了什么?

--

我已经找到了解决方法:

  import javax.validation.constraints.NotNull;

  @Entity
  public class Software extends Model {

    @NotNull
    String title;

但同样,有什么意义:

@Column(可为空=假)

如果它不起作用?

4

2 回答 2

1

javax.persistence.Column用于指定数据库列的详细信息。nullable 属性一般只在生成表定义时使用,在运行时不用于验证。

javax.validation.constraints.NotNull在运行时用于在持久化数据之前验证数据。

这就是为什么您在使用时收到 PersistenceException 的原因@NotNull。使用时也不例外@Column(nullable = false)

于 2012-12-27T02:09:41.277 回答
0

我想通了:

我在构建软件实例时犯了一个错误。因此,它可以工作并引发异常。我应该使用构建器实例 - 一个构建器对一个测试。然后一切都按预期进行。

@Test
public void saveWithoutTitle() {

    SoftwareTemplateBuilder builder = new SoftwareTemplateBuilder();
    Software software = builder.template1().withTitle(null).create();

    try {
        software.save();
        fail("software.title should not be null");
    } catch (ConstraintViolationException ex) {}
}
于 2012-12-27T22:03:19.730 回答