playframework捕获PersistenceException

时间:2012-12-26 23:52:34

标签: hibernate jpa playframework

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

在这里,我期待软件没有标题 - 所以我希望在保存这个实体时会抛出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(nullable = false)

如果它不起作用?

2 个答案:

答案 0 :(得分:1)

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

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

这就是使用@NotNull时收到PersistenceException的原因。使用@Column(nullable = false)

时也不例外

答案 1 :(得分:0)

我想通了:

我在构建Software实例时遇到了错误。因此,它可以工作并抛出异常。我应该使用构建器实例 - 一个构建器到一个测试。然后一切都像预期一样。

@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) {}
}