簡體   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