0

我希望能够从本质上反省我的所有实体都绑定到的模式的细节,并将其转发到应用程序层进行验证,这样我就不会将数据(从而浪费资源)提交给将最终被拒绝。

例如:

CREATE TABLE Foo(
    ID BIGINT PRIMARY KEY,
    Baz varchar(5) NOT NULL
);

@Entity
public class Foo {
   @Id
   public Long id;

   public String baz;

}


@Repository
public interface FooRepository extends PagingAndSortingRepository<Foo, Long> {}

Foo f = new Foo();
f.id = 1;
f.baz = "123456";

@Autowired 
FooRespository fooRepo;
fooRepo.save(f); // fails BEFORE going to DB with constrain violation.

我可以清楚地看到我可以自己实现这个,但我假设在伟大的世界的某个地方有一个 bean/validator 可以为我完成这项工作。

4

1 回答 1

0

我会避免重复您的架构制定的规则的设计。每次开始验证它是否知道约束时,您的程序都必须有效地对数据库进行逆向工程。此外,如果您有一个集群或分布式系统,一个不同的程序可能会插入一个创建约束冲突的行,而您的程序仍然必须处理该错误。

我鼓励您(a)不要担心不应该经常发生的事情,或者(b)如果您打算经常故意破坏模式,请重新考虑您的设计。

话虽如此,javax.validation.constraints 包已经存在,它可以帮助您预先验证对象是否看起来不错。但是,您将在 javax.validation.constraints 的 @NotNull 注释和您的数据库模式之间重复工作。将业务规则放在一个地方,以最大限度地减少您需要做的维护量。

于 2016-04-12T21:35:38.450 回答