我正在使用Spring JDBC,我想创建一个方法来检查它是否已经持久存储到数据库中,这意味着它将获得一个自动递增的密钥。
我有一个名为id
的字段为int的字段。由于原始int是自动赋值为0,如果没有给出其他值,我可以创建一个方法来检查id == 0
但是我必须确保我的主键序列从1开始。
我还可以在存储库中创建一个方法来检查对象是否已保存,但是我不想对此进行查询。
我能想到的最后一个选项是将id
的类型更改为Integer
,然后检查它是否为null
,但我不知道这是不是很好这样做的方法。
有没有办法在域层中使用方法来执行此操作?
答案 0 :(得分:3)
将id
的类型从int
更改为Integer
被认为是个好主意:Hibernate和JPA等持久性框架鼓励它(请参阅此示例来自{{ 3}}和来自java.net)的这个。
使用对象类型,您只需检查id == null
是否可以快速告知持久对象。只是为了完整性:
id == null
:未保存的对象,执行INSERT
id != null
:对象已保存,执行UPDATE
这样,您不必将0
(或任何其他整数值)视为特殊情况,意味着未初始化;你已经有了null
,它很好地传达了特殊情况的想法。
添加商家密钥
adam-bien.com中建议的更好的方法是在数据库管理的ID中添加业务键。业务键是一个实体标识符,与自动生成的主键(代理键)不同,它对用户有一些含义(自然键)。
然后,您应该覆盖equals
方法,以使用业务键比较两个对象,而不是自动生成的主键。