【发布时间】:2019-12-03 12:26:23
【问题描述】:
据我所知,有一个原则是不要创建具有不适当字段值的类实例。 为了解决这个问题,我使用具有所有必要字段的类构造函数。然后我检查参数并在参数错误时抛出异常。
在 JPA 实体类中使用这个解决方案是否合适,或者我应该在服务层中检查它?
在使用 Hibernate 注释保存之前,在控制器层验证参数。
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
@Column(name = ColumnNames.NAME, nullable = true)
@Size(min = 2, max = 50, message = "{person.name.size}")
String name;
@Column(name = ColumnNames.DATE_OF_BIRTH, nullable = true)
private LocalDate dateOfBirth;
protected Person(){}
public Person(String name, LocalDate dateOfBirth)
throws IllegalArgumentException, NullPointerException {
Objects.requireNonNull(name);
Objects.requireNonNull(dateOfBirth);
Preconditions.checkArgument(name.length() > 1,
"Name should have length more than 1 character");
this.name = name;
this.dateOfBirth = dateOfBirth;
}
//getters
}
【问题讨论】:
-
始终建议在控制器端处理数据验证。典型的企业系统会在控制器层进行数据验证,在服务层进行业务逻辑和实现,在存储层进行实际更改
-
@Coder 非常感谢您的回答!由于 Hibernate 注释,我在控制器层和保存之前验证数据。使用实体构造函数验证是一种不好的做法吗?我想它可以防止“错误”的类实例。
-
你得到你想要的东西了吗?或者你有任何后续问题?