繁体   English   中英

应用程序级别的数据库约束转发:如何自动使用JDBC和Spring

[英]application level db constraint forwarding: How to with JDBC and Spring automagically

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

例如:

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 /验证器将为我完成这项工作。

我会避免重复设计方案所制定规则的设计。 您的程序每次开始验证它知道约束时都必须对数据库进行有效的反向工程。 此外,如果您具有集群系统或分布式系统,则其他程序可能会插入一行,这会产生约束冲突,并且您的程序仍必须处理该错误。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM