如果我已经验证了 DTO,还需要验证实体吗?

Do I need to validate entities if I have already validated the DTO?

我有点误会。假设我有这样一个实体:

@Entity
public class Item {
    private String description;
}

以及此实体的 DTO:

public class ItemDto {
    private String description;
}

你已经明白了,所有的controller只和DTO一起工作,也就是说,我从client部分获取DTO,然后将其转化为实体,所以on.So,我决定验证一下DTO:

 public class ItemDto {
      @Max(value = 100, message = "Description must not exceed 100 characters")
      private String description;
 }

验证工作正常,但我有一个问题:我是否也需要验证实体?我一直认为实体中用于验证的注释是无用的,因为您仍然自己创建必要的 table 并设置必要的限制。但是随之而来的问题是,实体到底应该对应数据库中的table吗?也就是说,例如,如果我在一个字段的 table 中有一个 NOT NULL 约束,我是否也应该在实体中的这个字段上放置 @NotNull 注释? DTO也不清楚。我正在验证 DTO,但这可能不能保证完整的数据 protection.in 换句话说,理论上,某些程序员可能决定直接对实体执行某些操作,但它未经过验证。所有这些都会导致错误。或者可能会出现数据库中table中设置了限制,而entity.in中没有限制的情况,也就是说,你可以给实体赋任意值,但是当将其添加到数据库中。帮我处理一下情况。如果我没有解释清楚,请见谅。

你说

Should entities correspond to the table in the database at all? That is, for example, if I have a NOT NULL constraint in the table for a field, should I also put the @NotNull annotation over this field in the entity?

Bean Validation的目的是用来验证bean。因此,对于您不验证实体的情况,放置未使用的注释显然没有意义。


你说

I'm validating the DTO, but this probably doesn't guarantee complete. data protection

JPA annotations serve this purpose. For example, in the NOT NULL scenario you mentioned, you can use @Column 为:

@Column(nullable = false)