我对某种情况感到困惑。想象一下像 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
等注释创建自定义 validator 。 - 创建一个名为
ssnAvailable
的 transient 属性,该属性将由 PersonService 填充。
最佳答案
尝试在领域中思考。 Person
是否负责检查其某个属性在所有 Person
中是否唯一?不,它不是,也不应该具备这样做的能力。
这就是服务
通常的用途。运行搜索具有特定 SSN
的人员的查询是完全有效的。在 PersonService
中,签名可能如下所示:
public boolean isSsnPresent(String ssn)
如果您想在尝试将人员保存到数据库之前检查 SSN
是否存在,那么唯一约束对您没有帮助。
关于java - Bean 验证 + 数据库访问 + 断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50556868/