我对情况感到困惑。想象一个像Person这样的类:

@Entity
class Person {
    @NotBlank(message="Some message")
    @Column(name="ssn", nullable=false, unique=true)
    String ssn;
    ...
}


好吧,ssn必须是唯一的,我可以使用unique=true语句来做到这一点,但是为了向用户显示一些消息,断言会很不错:

@AssertTrue(message="SSN is already in use.")
public boolean isSsnAvailable() {
    // database query
}


你们认为这是个好习惯吗?对我来说有点奇怪,因为似乎通过添加数据库访问实体变得太复杂了。

我考虑了另外两种可能性:


@Unique这样的注释创建一个自定义验证器。
创建一个名为ssnAvailable的瞬态属性,该属性将由PersonService填充。

最佳答案

尝试思考领域。 Person是否负责检查其属性之一在所有Persons中是否唯一?不,不是,它不应该具有这样做的能力。

这就是Service通常的用途。运行查询来搜索具有特定SSN的人员的查询是完全有效的。在PersonService中,签名可能如下所示:

 public boolean isSsnPresent(String ssn)


如果要在将Person保存到数据库之前检查SSN是否存在,唯一约束对您没有帮助。

关于java - Bean验证+数据库访问+断言,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50556868/

10-08 22:26
查看更多