我有一个在其设置器中进行验证的对象。例如:
class Employee {
private String name;
public void setName(String theName) {
if (theName.contains("*")) {
throw new IllegalArgumentException("You can't have an asterisk in a name!");
}
name = theName
}
}
当 Hibernate 查询尝试使用无效数据(例如Employee
名称为“John Smith*”)实例化对象时,IllegalArgumentException
会导致整个查询失败。对于这个特定的应用程序——加载缓存——理想的行为是 Hibernate 捕获异常,拒绝记录,并返回在初始化期间没有抛出任何异常的对象列表。
我知道许多替代解决方案:
- 通过直接字段访问设置 Hibernate ,绕过设置器
- 与其在 setter 中抛出异常,不如将对象标记为无效,然后将它们从返回的 List 中过滤出来
org.hibernate.Query.list()
,或者保存验证以备后list()
返回。 - 保证数据库数据的清洁(如果这在我的能力范围内!)
我的偏好是允许对象继续从 setter 中抛出异常,并避免对 Hibernate 结果进行后处理,并避免为 Hibernate 实例化的对象引入新的验证生命周期步骤。有没有办法做到这一点?