我正在使用 Spring JDBC,我想创建一个方法来检查它是否已保存到数据库中,这意味着它将获得一个自动递增的 key 。
我有一个名为 id
的 int 类型字段。由于如果没有给出其他值,原始整数会自动分配 0,因此我可以创建一个方法来检查 id == 0 是否为 0,但随后我必须确保我的主键序列从 1 开始。
我还可以在存储库中创建一个方法来检查对象是否已保存,但我不想为此进行查询。
我能想到的最后一个选择是将id
的类型更改为Integer
,然后检查它是否为null
,但我不知道这是否是一个好方法。
有没有办法在域层中有一个方法来做到这一点?
最佳答案
将 id
的类型从 int
更改为 Integer
被认为是一个好主意:持久性框架,例如 Hibernate JPA 鼓励这样做(请参阅 java.net 中的这个示例和 adam-bien.com 中的这个示例)。
使用对象类型,您只需检查是否 id == null
即可快速区分未持久化的对象和持久化的对象。只是为了完整性:
id == null
:未保存的对象,执行INSERT
id != null
:对象已保存,执行UPDATE
这样,您就不必将 0
(或任何其他整数值)视为表示未初始化的特殊情况;您已经有了 null
,它很好地传达了特殊情况的想法。
添加业务 key
this article 中建议的更好的方法,就是除了数据库管理的 ID 之外还使用业务 key 。业务 key 是一个实体标识符,与自动生成的主键(代理键)不同,它对用户具有一定的意义(自然键)。
然后,您应该重写 equals
方法,以使用业务键而不是自动生成的主键来比较两个对象。
关于java - 如何检查对象是否已保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15534634/