2016-04-12 5 views
0

エンティティがバインドされているすべてのスキーマの詳細を本質的にイントロスペクションできます。最終的に却下されるデータベースにデータを(したがって、無駄なリソースを)提出しないでください。アプリケーションレベルのDB制約フォワーディング:JDBCとSpringを自動的に使用する方法

例えば:

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. 

私は明らかに私はこれを自分で実装することができます見ることができますが、私は偉大な世界のどこかにそこに想定していますが私のためにこの仕事を行います豆/バリです。

答えて

0

あなたのスキーマが定めるルールを複製するデザインは避けています。あなたのプログラムは、制約を知っていることを検証するたびにデータベースを効果的にリバースエンジニアリングする必要があります。さらに、クラスター化されたシステムまたは分散システムを使用している場合、別のプログラムが制約違反を作成する行を挿入し、プログラムがそのエラーを処理する必要があります。

非常に頻繁に起こらないように心配しないでください。(b)意図的にスキーマを頻繁に破る場合は、デザインを再考することをお勧めします。

このように言えば、javax.validation.constraintsパッケージが存在し、オブジェクトが正常に見えることを事前検証するのに役立ちます。しかし、たとえば、javax.validation.constraintsの@NotNullアノテーションとデータベーススキーマの間で労力を重複して使用することになります。ビジネス・ルールを1か所に配置して、必要なメンテナンスを最小限に抑えます。

+0

私はすでにjavax.validationを使用しています。ビジネスルールをDB(1か所)に配置すると、ルールを重複して転送するだけです。複製はエンティティフィールドに@NotNullを持ち、カラムにNOT NULLを持つでしょう。 DB内の制約が破棄されると、アプリケーションが過度に制限される可能性があります。 –

関連する問題