如何检查对象是否已保存到数据库

时间:2013-03-20 21:01:18

标签: java jdbc spring-jdbc

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

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

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

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

有没有办法在域层中使用方法来执行此操作?

1 个答案:

答案 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方法,以使用业务键比较两个对象,而不是自动生成的主键。