2

Spring JDBC を使用しており、データベースにまだ永続化されているかどうかを確認するメソッドを作成したいと考えています。つまり、自動インクリメント キーを取得したことになります。

idタイプ intという名前のフィールドがあります。他の値が指定されていない場合、プリミティブ int には自動的に 0 が割り当てられるため、チェックするメソッドを作成できますがid == 0、主キー シーケンスが 1 から始まることを確認する必要があります。

オブジェクトが保存されたかどうかを確認するメソッドをリポジトリに作成することもできますが、これに対してクエリを実行したくありません。

私が考えることができる最後のオプションは、 to のタイプを変更してidからInteger、それがそうであるかどうかを確認することでしnullたが、それが良い方法であるかどうかはわかりません。

これを行うためにドメイン層にメソッドを持つ方法はありますか?

4

1 に答える 1

4

のタイプをidからintに変更することIntegerは良い考えと考えられています。Hibernate や JPA などの永続化フレームワークそれを推奨しています ( java.netのこの例とadam-bien.comのこの例を参照してください)。

オブジェクト タイプを使用すると、id == null. 完全を期すために:

  • id == null: 保存されていないオブジェクトです。INSERT
  • id != null: オブジェクトは既に保存されています。UPDATE

0このように、 (または他の整数値) をuninitializedを意味する特別なケースとして扱う必要はありません。nullこれは、特殊なケースの考え方をうまく伝えています。

ビジネス キーの追加

この記事で提案されているさらに優れたアプローチは、データベース管理 ID に加えてビジネス キーを使用することです。ビジネス キーは、自動生成された主キー (代理キー) とは異なり、ユーザーにとって何らかの意味を持つエンティティ識別子です (自然キー)。

equals次に、自動生成された主キーではなく、ビジネス キーを使用して 2 つのオブジェクトを比較するメソッドをオーバーライドする必要があります。

于 2013-03-20T21:33:35.263 に答える