2

我正在使用 Spring JDBC,我想创建一个方法来检查它是否已经持久化到数据库中,这意味着它会获得一个自动递增的键。

我有一个名为idint 类型的字段。由于如果没有给出其他值,原始整数会自动分配为 0,我可以创建一个方法来检查是否id == 0但我必须确保我的主键序列从 1 开始。

我还可以在存储库中创建一个方法来检查对象是否已保存,但是我不想对此进行查询。

我能想到的最后一个选项是更改 to 的类型,id然后Integer检查它是否是,null但我不知道这是否是一个好方法。

有没有办法在域层中有一个方法来做到这一点?

4

1 回答 1

4

改变idfrom intto的类型被认为是一个好主意: HibernateInteger和 JPA等持久性框架鼓励这样做(参见java.net中的这个示例和adam-bien.com中的这个示例)。

使用对象类型可以让您快速区分非持久对象和持久对象,只需检查id == null. 只是为了完整性:

  • id == null:未保存的对象,执行INSERT
  • id != null:对象已保存,执行UPDATE

这样,您不必将0(或任何其他整数值)视为特殊情况,即uninitialized;你已经有了null,它很好地传达了特殊情况的想法。

添加业务密钥

本文建议的一种更好的方法是在数据库管理的 ID 之外使用业务密钥。业务键是一个实体标识符,与自动生成的主键(代理键)不同,它对用户具有一定的意义(自然键)。

然后,您应该重写该equals方法以使用业务键而不是自动生成的主键来比较两个对象。

于 2013-03-20T21:33:35.263 回答