【发布时间】:2017-10-20 22:34:48
【问题描述】:
很多JPA实体演示类都有以下sn-ps:
@Id
private Long id;
任何人都可以看到将id 属性始终标记为最终属性的任何缺点吗?
@Id
private final Long id;
似乎我们几乎总是希望这样做以保留实体身份。
【问题讨论】:
-
因为这样就没有办法持久化实体了?
-
这是一个很好的理由:)
很多JPA实体演示类都有以下sn-ps:
@Id
private Long id;
任何人都可以看到将id 属性始终标记为最终属性的任何缺点吗?
@Id
private final Long id;
似乎我们几乎总是希望这样做以保留实体身份。
【问题讨论】:
这使得使用 JPA 类变得不可能。
final 是 Java 关键字,而不是框架关键字。 Java 不关心 JPA 实体的契约是什么。您不能声明未初始化的 final 字段,因为按照约定,final 字段只能写入一次。
另外,ID 属性不是不可变的。对于初学者来说,当一个对象被序列化时,它们会发生变化——一个空 ID 被一个生成的 ID 替换。更简单的是,当从数据库中删除一个实体时,它的 ID 将被取消。
【讨论】: