モデル内のエンティティを表すPOJOにOID (通常はデータベースの行識別子)を含めることの長所と短所を説明できますか?
実際、私はイコール/ハッシュコードなどに関連する問題について話しているのではありません。私の問題をもっとよく説明するべきでした(私の悪い:) )...
ビジネス オブジェクト (製品、カタログなど) を表すエンティティ クラスがいくつかあります。場合によっては「ビジネス ID」があります。たとえば、Product は一意の ProductId (id、type、repository の 3 つのフィールドがあります) で見つけることができます。
私たちのデータベースでは、Product テーブルには 3 つのビジネス列 (id、type、repository) に加えて代理主キー列 (OID) があり、外部キーの参照を容易にし、結合句を少なくしています。
Product/ProductId クラスは、他のアプリケーションに公開する API の一部です。たとえば、次のように呼び出すことができます。
productManager.findProductById(ProductId productId);
問題は、クライアントが ProductId 識別子を使用することが期待されていることを知って、OID を Product または ProductId クラスに含める必要があるかどうかです。
長所:
OID を使用して、次のような別のルックアップを行うことができます
Product p = productManager.findProductById(ProductId productId); Catalog c = productManager.findAllCatalogsContainingProduct(p.getOid());
アプリケーションで ProductId を使用して多くのルックアップを行うことに慣れているため、データベースへのラウンドトリップのたびに、ProductId に一致する OID を見つける必要がなくなります。
短所:
- OID をクライアントに公開しました (ビジネス キーの代わりに OID を使用しないことを祈りましょう!!)
他の長所と短所をリストできますか?