您能否描述在代表模型中实体的POJO中包含OID(通常是数据库行标识符)的优缺点?
事实上,我不是在谈论与 equals/hashcode 等相关的问题,我应该更好地描述我的问题(我的错误:))...
我们有一些代表业务对象的实体类(如产品、目录等......)。有时他们有一个“企业 id”,例如可以通过其唯一的 ProductId 找到产品(它有 3 个字段:id、类型、存储库)。
在我们的数据库中,除了 3 个业务列(id、type、repository)之外,Product 表还有一个代理主键列 (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(希望他不要使用它而不是业务密钥!!)
你能列出其他优点和缺点吗?