我对情况感到困惑。想象一个像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/